Security vs Cloud blog | Январь 2016

Security vs Cloud blog

Здесь найдете заметки по безопасности, облакам и предпринимательству

Beer IoT - проект автоматической облачной пивоварни на Win10 IoT и Windows Azure (Часть 2)

Отшумели праздники, и Али стал доставлять заказанные блочки для пивоварни, которые мы описывали в 1 части (http://sec360.ru/post/beer-iot-win10-iot-windows-azure-1)



Какие у нас тут появились задачи. Во-первых для управления тенами надо управлять блоком реле. Данны реле на 10A, надо на 20, поэтому ждем следующий приход, но само управление вполне подходит. Блок реле с развязкой на оптронах (черные прямоугольники), поэтому никаких резисторов ставить не надо, достаточно подключить напрямую к PIN'ам Raspberry и можно управлять. Важно, что данный блок имет реверсивных вход, те 5в - реле выключено, 0 - активно.
Итак, берем карту PIN'ов Raspberry PI 2:



подключаем питание блока реле на PIN 4-5 (PWR 5v, GND) и управление 1 каналом на GPID 18 (PIN 12)
Ну а дальше все проще некуда - включаем реле и отключаем реле
var gpio = GpioController.GetDefault();
pin = gpio.OpenPin(LED_PIN);
pinValue = GpioPinValue.High; //Так как вход у нас инверсный, ставим High
pin.Write(pinValue);
pin.SetDriveMode(GpioPinDriveMode.Output); //режим пина на выход
pinValue = GpioPinValue.Low;
pin.Write(pinValue);
pinValue = GpioPinValue.High;
pin.Write(pinValue);

Теперь переходим к подключению термопары. У на есть термопара DS18B20 на полноценной версии протокола 1-Wire. Он цифровой.С 1-Wire можно подключить к Raspberry напрямую и использовать программную реализацию 1-Wire протокола. Тут нам на помощь приходит github - есть готовая реализация 1-wire, портированная с C++ https://github.com/selomkofori/ds18b20_win10iot/blob/master/DS18B201WireLib/OneWire.cs
Остается с ее помощью получать температуру:

  public async Task<double> getTemperature(string deviceId)
        {
            double tempCelsius = -200;

            if (await onewireReset(deviceId))
            {
                await onewireWriteByte(0xCC); //1-Wire SKIP ROM команда (ignore device id)
                await onewireWriteByte(0x44); //DS18B20 convert T команда 
                                              

               //Ждем 750 ms на старт
                await Task.Delay(750);

                // начинаем читать данные
                await onewireReset(deviceId);
                await onewireWriteByte(0xCC); //1-Wire Skip ROM command тут можно смотреть DeviceId, мы скипаем
                await onewireWriteByte(0xBE); 

                byte tempLSB = await onewireReadByte(); //читаем lsb
                byte tempMSB = await onewireReadByte(); //читаем msb
// останавливаем отправку данных термометром await onewireReset(deviceId); // получаем температуру tempCelsius = ((tempMSB * 256) + tempLSB) / 16.0; System.Diagnostics.Debug.WriteLine("T: " + tempCelsius + " degrees C " + temp2); } return tempCelsius; }