Zabawa z IoT na platformie Azure

wpis w: Arduino, Azure, IoT | 1

1. Zakup urządzenia
Wg producenta jest to
Moduł WiFi oparty na układzie ESP8266. Na pokładzie znajduje się 9 portów GPIO z obsługą I2C i SPI, wejście analogowe oraz złącze baterii lipol 3,7 V. Posiada oprogramowanie NodeMCU, które wspiera język skryptowy Lua lub środowisko Arduino IDE. Dodatkowym atutem jest wbudowany konwerter napięć na liniach interfejsu UART.
Czyli skrócie dostajemy gotowe urządzenie, które potrafi się komunikować po WIFI i ma możliwość podłączania dodatkowych czujników m.in. temperatury i wilgotności.

esp8266_1

2. Konfiguracja IoTHub na platformie Azure

Wybieramy menu “wszystkie zasoby”

azure_iot_1

Z kategorii Internet of Things wybieramy IoT Hub i wypełniamy podstawowe parametry, unikalną nazwę, grupę zasobów i lokalizację. Na początek proponuję zacząć od planu darmowego F1, ale jeśli planujemy coś bardziej poważnego, to w chwili obecnej nie ma możliwości podniesienia planu usługi. Można tylko postawić kolejna usługę. Wstaje ona po kilku minutach.

 

azure_iot_2

 

Po wygenerowaniu kluczy z polisy iothubowner możemy przejść do rejestracji naszych urządzeń

Device ID: Nazwa urządzenia. Unikalna w ramach IoT huba, wielkie i male litery maja znaczenie

Authentication Type: Pozostawiamy Symmetric Key.

Auto Generate Keys: Pozostawiamy zaznaczone (zostaną automatycznie wygenerowanie klucze).

Connect device to IoT Hub: Pozostawiamy Enable.

azure_iot_3

 

Każde z urządzeń będzie mieć wygenerowane dwa klucze.

azure_iot_4

Konfiguracja połączeń w tym przypadku wygląda tak

 

HostName=djkormohub.azure-devices.net;DeviceId=ESP8266;SharedAccessKey=KLUCZ1

HostName=djkormohub.azure-devices.net;DeviceId=ESP8266;SharedAccessKey=KLUCZ2

I tę konfigurację będziemy wykorzystywać podczas pracy z urządzeniem. W ten sposób Hub wie, z jakiego urządzenia nadchodzą dane z czujników.

Jeżeli nasz hub nazwałem djkormohub to warto sprawdzić połączenie sieciowe na porcie 8883

telnet djkormohub.azure-devices.net 8883

3. Instalacja oprogramowania Arduino
Adres instalatora
https://www.arduino.cc/en/Main/Software
W momencie pisania artykułu jest to wersja 1.8.5.

arduino_1

arduino_2

Pojawi się grupa  pytań wymagających potwierdzenia instalacji sterowników “Arduino”arduino_5 arduino_6

Instalacja została zakończona.

4. Konfiguracja Visual Studio Code

Potrzebny będzie dedykowany plugin do Arduino. Plugin ten nie zadziała bez instalacji  oprogramowania z punktu 3).

Adres pluginu
https://marketplace.visualstudio.com/items?itemName=vsciot-vscode.vscode-arduino

vsc_1

 

Po instalacji pluginu proponuje restart VSC. U mnie bez tego nie były możliwe dalsze kroki.

Zaczynamy od konfiguracji dla ESP8266.

Podlączyłem urządzenie po USB, pojawił się komunikat

vsc_3

-> Arduino: Boar Manager.

vsc_2Naciskamy aditional Urls. Wstawiamy w pliku User Settings .json adres

"arduino.additionalUrls": 
[
"http://arduino.esp8266.com/stable/package_esp8266com_index.json"
]

vsc_4

Wybieramy w polu “filter your search” esp8266.

Wybrałem ostatnią wersje stabilną, czyli 2.4.0 i przycisk install. Po krótkiej chwili skończyło się to tak:

java.io.IOException: Can't extract file C:\Users\User\AppData\Local\Arduino15\packages\esp8266\tools\esptool\0.4.12\esptool.exe, file already exists!
    at cc.arduino.utils.ArchiveExtractor.extract(ArchiveExtractor.java:212)
    at cc.arduino.utils.ArchiveExtractor.extract(ArchiveExtractor.java:81)
    at cc.arduino.contributions.packages.ContributionInstaller.install(ContributionInstaller.java:142)
    at processing.app.Base.(Base.java:323)
    at processing.app.Base.main(Base.java:144)
[Error] Exit with code=255

Ups…
Bez chwili namysłu wybrałem starszą wersję 2.3.0. Udało się

[Done] Installed board package - esp8266

A poźniej zrobiłem upgrade. W ten sposób mam działającą wersje 2.4.0.

Uruchamiamy Arduino:Board Config

vsc_5

To czego nam brakuje to bibioteki do obsługi naszego IoTHuba w Azure i nie tylko

Uruchamiamy Arduino: Librany Manager i instalujemy bibioteki

AzureIoTHub
AzureIoTUtility
AzureIoTProtocol_MQTT
ArduinoJso
DHT sensor library
Adafruit Unified Sensor

vsc_6

[Done] Installed library - AzureIoTHub
[Done] Installed library - AzureIoTUtility
[Done] Installed library - AzureIoTProtocol_MQTT
[Done] Installed library - ArduinoJson
[Done] Installed library - DHT sensor library
[Done] Installed library - Adafruit Unified Sensor

Oprogramowanie do pracy z płytką zostało zinstalowane. Czas na prosty przykład. Pobieram z githuba, gotowy projekt przygotowany przez Microsoft.

git clone https://github.com/Azure-Samples/iot-hub-feather-huzzah-client-app.git

Ponieważ, nie mam jeszcze czujnika DTH22 (temparatura i wilgotność) wykorzystam możliwość symulacji jego zachowania.
W pliku config.h należy zmienić linię kodu odpowiedzialną za nią

define SIMULATED_DATA true

Otwieramy w VSC plik app.ino.

Spróbujmy zapisać oprogramowanie na urządzeniu
Uruchamiamy Arduino:Upload i po wybraniuy portu komunikacyjnego pojawi się po chwili następujący komunikat.

exec: "/bin/xtensa-lx106-elf-g++": file does not exist
[Error] Exit with code=1

Kolejne ups ?

Po krótkim wykorzystaniu wujka Google trafiłem na rozwiązanie. Należy zainstalować brakujące oprogramowanie w podkatalogu hardware Arduino.

 

cd hardware
mkdir esp8266com
cd esp8266com
git clone https://github.com/esp8266/Arduino.git esp8266

cd esp8266/tools
python get.py
     

Log z instalacji

C:\Program Files (x86)\Arduino\hardware>mkdir esp8266com

C:\Program Files (x86)\Arduino\hardware>cd esp8266com

C:\Program Files (x86)\Arduino\hardware\esp8266com>git clone https://github.com/
esp8266/Arduino.git esp8266
Cloning into 'esp8266'...
remote: Counting objects: 17296, done.
remote: Compressing objects: 100% (28/28), done.
remote: Total 17296 (delta 8), reused 17 (delta 6), pack-reused 17260
Receiving objects: 100% (17296/17296), 41.40 MiB | 1.81 MiB/s, done.
Resolving deltas: 100% (10102/10102), done.

C:\Program Files (x86)\Arduino\hardware\esp8266com>cd esp8266/tools

C:\Program Files (x86)\Arduino\hardware\esp8266com\esp8266\tools>python get.py
Platform: i686-mingw32
Downloading esptool-0.4.13-win32.zip
Done
Extracting dist/esptool-0.4.13-win32.zip
Renaming esptool-0.4.13-win32/ to esptool
Downloading win32-xtensa-lx106-elf-gb404fb9-2.tar.gz
Done
Extracting dist/win32-xtensa-lx106-elf-gb404fb9-2.tar.gz
Downloading mkspiffs-0.2.0-no_magic_length-windows.zip
Done
Extracting dist/mkspiffs-0.2.0-no_magic_length-windows.zip
Renaming mkspiffs-0.2.0-no_magic_length-windows/ to mkspiffs

Restartujemy Arduino.

Instalujemy obraz z poziomu Arduino (VSC nadal poprawnie nie działa).

arduino_7

Zwróćcie uwagę na migająca niebieską diodę podczas zapisywania oprogramowania.

Oprogramowanie wgrane, teraz należy podłączyć urządzenie do naszej sieci WIFI.

Po podaniu nazwy sieci WIFI (SSID) , hasła (PASS) i konfiguracji połączenia naszego urządzenia do IotHuba w postaci

HostName=djkormohub.azure-devices.net;DeviceId=ESP8266;SharedAccessKey=KLUCZ1

Urządzenie uruchamia się:

SDK:2.2.1(cfd48f3)/Core:win-2.5.0-dev/lwIP:2.0.3(STABLE-2_0_3_RELEASE/glue:arduino-2.4.1-7-g2b827f8)
Serial successfully inited.
Do you need re-input your credential information?(Auto skip this after 5 seconds)[Y/n]
Input your Wi-Fi SSID: 
Input your Wi-Fi password: 
Input your Azure IoT hub device connection string: 
Attempting to connect to SSID: guest.
connected with guest, channel 9
dhcp client start...
ip:192.168.1.196,mask:255.255.255.0,gw:192.168.1.1
Connected to wifi guest.
Fetched NTP epoch time is: 28828.
IoT Hub SDK for C, version 1.1.29
Sending message: {"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":1,"temperature":29,"humidity":36}.
IoTHubClient accepted the message for delivery.
:ref 1
:ctmo
:abort
:ur 1
:del
TLS failed to start the connection process.
Error: io_open failed
failure connecting to address djkormohub.azure-devices.net.
:ref 1
:ctmo
:abort
:ur 1
:del
TLS failed to start the connection process.
Error: io_open failed
failure connecting to address djkormohub.azure-devices.net.
:ref 1

Widać, że urządzenie podłączyło się do sieci bezprzewodowej i próbuje wystać komunikat w postaci

{"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":1,"temperature":29,"humidity":36}.

Urządzenie ESP_*  jest widoczne od strony rutera WIFI, otrzymało przez DHCP swój adres IP.

asus_1

Włączyłem opcje debugowania i mam taki wyciąg z logów

[hostByName] request IP for: djkormohub.azure-devices.net
[hostByName] Host: djkormohub.azure-devices.net IP: 10.0.0.1

 

Problematyczne okazało się żle skonfigurowany DNS i urządzenie nie potrafiło ustalić adresu IP huba. IP 10.0.0.1 to lokalny adres rutera mojego dostawcy internetu.

Po naprawie konfiguracji w logach monitora zaczęły pojawiac sie komunikaty

Sending message: {"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":79,"temperature":28,"humidity":37}.
IoTHubClient accepted the message for delivery.
Message sent to Azure IoT Hub
Sending message: {"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":80,"temperature":13,"humidity":34}.
IoTHubClient accepted the message for delivery.
Message sent to Azure IoT Hub
Sending message: {"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":81,"temperature":11,"humidity":36}.
IoTHubClient accepted the message for delivery.
Message sent to Azure IoT Hub
Sending message: {"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":82,"temperature":16,"humidity":37}.
IoTHubClient accepted the message for delivery.
Message sent to Azure IoT Hub
Sending message: {"deviceId":"Feather HUZZAH ESP8266 WiFi","messageId":83,"temperature":30,"humidity":33}.
IoTHubClient accepted the message for delivery.

Zweryfikowałem metryki diagnostyczne usługi w Azure. Pojawiły się pierwsze komunikaty.

azure_iot_5

W darmowym planie F1 mamy do wykorzystania 8000 komunikatów na dobę, jeśli dobrze oszacowałem oznacza to jeden komunikat co 11 sekund. Do prostych pomiarów jest to wystarczające.

 

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.