Пример #1
0
        private ushort[] runCommand(SGPCommand cmd, ushort[] parameters = null)
        {
            bus.SetDevice(this.address);

            var bytesToWrite = new byte[cmd.OpCode.Length + (cmd.ParameterLength * (WORD_LENGTH + CRC_LENGTH))];

            if (cmd.ParameterLength > 0 && parameters?.Length != cmd.ParameterLength)
            {
                throw new ArgumentException(nameof(parameters));
            }

            Array.Copy(cmd.OpCode, 0, bytesToWrite, 0, cmd.OpCode.Length);
            if (parameters != null)
            {
                foreach (var i in Enumerable.Range(0, parameters.Length))
                {
                    Span <byte> span = bytesToWrite.AsSpan().Slice(i * (WORD_LENGTH + CRC_LENGTH) + cmd.OpCode.Length, (WORD_LENGTH + CRC_LENGTH));
                    span[0] = (byte)(parameters[i] >> 8);
                    span[1] = (byte)(parameters[i] & 0xFF);
                    span[2] = CRC(span.Slice(0, WORD_LENGTH));
                }
            }
            var argBytes = bytesToWrite.AsSpan(1);

            bus.WriteI2cBlockData(bytesToWrite[0], argBytes.ToArray());
            Thread.Sleep(cmd.ResponseTimeMs);
            if (cmd.ResponseLength > 0)
            {
                var data = new byte[cmd.ResponseLength * (WORD_LENGTH + CRC_LENGTH)];
                bus.ReadI2cBlockData(0, data);
                ushort[] result = ReadCheckSummedWords(data);
                return(result);
            }
            return(Array.Empty <ushort>());
        }
Пример #2
0
        private byte[] runCommand(byte command, int resultLength)
        {
            bus.SetDevice(this.address);
            bus.WriteData(new byte[] { command });

            if (resultLength > 0)
            {
                byte[] result = new byte[resultLength];
                bus.ReadData(result);
                return(result);
            }
            return(Array.Empty <byte>());
        }
Пример #3
0
        public BME280(I2CBus bus, int address = DEFAULTADDRESS)
        {
            this.bus     = bus;
            this.address = address;

            bus.SetDevice(this.address);

            var chipId = new byte[1];

            bus.WriteData(new byte[] { 0xD0 });
            bus.ReadData(chipId);
            System.Console.WriteLine($"Chip id = {chipId[0]} Expected {CHIPID}");

            this.getCalibrationData();
            this.getHumidityCalibrationData();
        }
Пример #4
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            I2CBus bus = new I2CBus();

            bus.Open("/dev/i2c-1");
            bus.SetDevice(0x58);

            SGP30  sensor = new SGP30(bus);
            string str    = sensor.GetSerialNumber();

            Console.WriteLine($"SGP30 Serial number: {str}");
            sensor.InitAirQuality();

            var baseLine = sensor.GetBaseline();

            Console.WriteLine($"Baseline: {baseLine.Raw_CO2} {baseLine.Raw_VOC}");

            //sensor.SetBaseline(0, 0); values are only available after 12 hours or something so no clue
            // what a valid baseline is

            // while (true)
            // {
            //     var result = sensor.MeasureAirQuality();
            //     Console.WriteLine($"{DateTime.Now}  {result.CO2_PartsPerMillion}");
            //     Thread.Sleep(1000);
            // }

            BME280 sensor2 = new BME280(bus, 0x76);

            while (true)
            {
                var temperature = sensor2.ReadTemperature();
                Console.WriteLine($"{DateTime.Now} Temperature: {temperature}");
                Thread.Sleep(1000);
            }
        }