poniedziałek, 7 maja 2018

ESP32 BLE iTAG początek nowego rozdziału IoT

Staram się zrozumieć czy ma jakikolwiek sens kupowanie i używanie w projektach domowej automatyki nowego dziecka ESPRESSIF - mikrokontrolera ESP32.  ESP8266 wypełnia mi aż nadto wszystkie moje bieżące potrzeby. Są jednak sytuacje, że sięgnięcie po nowość można by uzasadnić. U mnie takim uzasadnieniem jest kilka kupionych w owczym pędzie iTAGów, które zamierzałem zastosować w IoT jako eleganckie i bezpieczne elementy sterujące. Nie udało się, bo ich współpraca  z telefonem czy tabletem nijak nie dała się połączyć z BLYNKiem. Teraz za sprawą ESP32 wraca nadzieja na ich wykorzystanie.
Cel dzisiejszych eksperymentów to skomunikowanie iTAGa i ESP32 oraz zarejestrowanie przez program w ESP32 faktu naciśnięcia przycisku na iTAGu.



Nie ma biblioteki ESP32 BLE dla Arduino na oficjalnym repozytorium ESPRESSIF. Link odsyła nas do zasobów Niela Kolbana. Aktualna wersja biblioteki jest dostępna tu>>>>. Należy ją umieścić w odpowiednim katalogu /librares dla ESP32.

Uruchamiamy Arduino IDE i szukamy przykladów dla biblioteki BLE


Jest ich kilka. Najbardziej zachęcająco wygląda BLE_scan a więc do dzieła
Kompilacja przebiega bez zakłóceń ale jakoś bardzo długo. Rzut oka na komunikat z kompilacji i stało się jasne dlaczego to tyle trwa.....


Z nieznanych przyczyn szkic zajmuje aż 93% pamięci programu. No niezła długość jak na program przykładowy. Lektura kilku wpisów wyjaśnia wszystko - ta biblioteka BLE tak ma i nic nie można na to poradzić. Nie ma też prostego sposobu by dostępną pamięć programu w ESP32 poszerzyć. Trzeba  mocno pogrzebać w konfiguracji Arduino IDE

>>>>>>>>>>>>>>>>>>>>>
Na dobrą sprawę mógłbym tu zakończyć dzisiejszy wpis bo to praktycznie kończy sens dalszych prób z BLE na ESP32. Jak tu do pozostałych 7% pamięci wtłoczyć kolejne biblioteki BLYNKa i jeszcze swój własny program?
>>>>>>>>>>>>>>>>>>>>>>

Dokończę jednak testowania biblioteki BLE i połączenia z iTAGami. Program przecież działa i trzy moje  iTAGi bezbłędnie wykrywa


UWAGA
iTAG trzeba wcześniej włączyć - długie naciśnięcie powinno spowodować podwójny sygnał. Wyłączenie to dłuższe naciśnięcie i pojedynczy sygnał.
Jeśli bateria jest słaba to przy naciskaniu przycisku wydawany jest krócitki cichy pik

A to odczytane dane:

iTAG zielony
Advertised Device: Name: iTAG            ,
Address: ff:ff:c2:0e:e0:e5,
appearance: 961,
serviceUUID: 0000ffe0-0000-1000-8000-00805f9b34fb,
txPower: 0

iTAG czarny
Advertised Device: Name: ITAG,
Address: fc:58:fa:05:a4:62,
serviceUUID: 00001803-0000-1000-8000-00805f9b34fb,
txPower: 0

iTAG różowy
Advertised Device: Name: ITAG,
Address: fc:58:fa:04:cb:03,
serviceUUID: 00001803-0000-1000-8000-00805f9b34fb,
txPower: 0

Widać iż iTAG zielony jest inaczej skonfigurowany (zaprogramowany ?) niż dwa pozostałe.

Jak się czyta opis standardu BLE to widać że jest on nieźle pokomplikowany i ciężko się w nim rozeznać.
Trochę podstawowych informacji, tak na szybko i po polsku można przeczytać tu>>>>>
Niewiele mi to pomogło do dalszych eksperymentów. Ale najważniejsze są dwie informacje:

urządzenia BLE mogą pracować w dwu modach pracy
  • rozgłaszania - taki odpowiednik UDP
  • komunikacji klient-serwer - coś na kształt TCP/IP
oraz, że konfiguracja urządzenia (profil) urządzenia skalda się z kilku usług (service) realizowanych przez to urządzenia a każda usługa zawiera jakieś tam dane (chracteristic). 

 iTAG  komunikuje się w modzie klient-serwer (GATT). Serwerem jest iTAG a klientem telefon.

Jeśli tak to można sprawdzić jakie usługi zdefiniowane w GATT realizują moje iTAGi.

UUID  = 00001803 oznacza w nomenklaturze standardu BLE Link Loss tzn i TAG skonfigurowany jest w pierwszym rzędzie do sygnalizacji utraty połączenia.

UUID = 0000ffe0 nie jest zdefiniowane w standardzie BLE a to znaczy, że  usługa jest zdefiniowana przez producenta sprzętu. Z lektury tego wpisu wynika, iż dla iTAGa jest to usługa obsługi przycisku.
A na tym mi właśnie zależy więc iTAG zielony idzie do dalszej obróbki

Znalazłem w sieci jeden przykład programu na połączenie iTAG z ESP32

Nie zmieniałem w nim wiele. Najważniejsze to wstawić właściwy adres iTAGa - u mnie to adres zielonego przycisku



A efekt działania programu jest więcej niż zadowalający 


Zaznaczona linia pojawia się każdorazowo po naciśnięciu przycisku iTAGa. 

Niestety dwa pozostałe iTAGi nie dały się pozytywnie skomunikować z ESP32 i powodowały cykliczne resetowanie się mikrokontrolera.

Cel został osiągnięty choć do odtrąbienia sukcesu jeszcze baaardzo daleko.
Dobra wiadomość jest taka, że jakaś tam komunikacja pomiędzy iTAGiem a ESP32 jest i nawet coś z tym można zrobić. 
Zła że jest to wszystko mocno nieuporządkowane i przypadkowe - ale mam nadzieję że to skutek początkowego etapu zabawy z BLE i ESP32

Ale najważniejszy problem - brak wystarczającej pamięci programu w ESP32 po załadowaniu bibliotek BLE - wciąż czeka na rozwiązanie by dalsze zabawy z ESP32 i BLYNKiem miały sens.

Mimo połowicznego sukcesu podoba mi się ten BLE i ESP32. 
Jest więc spora szansa na ciąg dalszy

przydatne linki

http://delphi.pl/zlot/zlot2017/prezentacje/Bluetooth_Low_Energy_MG.pdf
https://ru-clip.com/video/iCKIIMrphtg/esp32-ble-client-heart-rate-monitor-with-oled-and-mqtt.html
https://thejeshgn.com/2017/06/20/reverse-engineering-itag-bluetooth-low-energy-button/
https://github.com/aknik/ESP32/blob/master/iTag32/iTag32_Client.ino
https://github.com/sylvek/itracing2/issues/6
https://github.com/CuriousTimo/ESP32/blob/master/ESP32_OLED_HRM/ESP32_OLED_HRM.ino


https://hackaday.io/project/33755-itag-esp32
https://www.youtube.com/watch?v=R3QMKk45eJE
https://www.youtube.com/watch?v=nn6xG9lSWVM
https://www.esp32.com/viewtopic.php?t=1887
https://www.youtube.com/watch?v=KNoFdKgvskU
https://github.com/SensorsIot/Bluetooth-BLE-on-Arduino-IDE/blob/master/BLE_Proximity_Sensor/BLE_Proximity_Sensor.ino
https://ru-clip.com/video/KNoFdKgvskU/176-ble-human-presence-detector-using-an-esp32-tutorial-arduino-ide.html
https://www.esp32.com/viewtopic.php?f=13&t=5612
134

2 komentarze:

  1. Witam! Czy przez ostatni rok poprawiono ilość dostępnej pamięci na program użytkownika? Z jakiej odległości esp32 wykrywa sygnał iTAG-a?

    OdpowiedzUsuń
  2. nie wiem na razie temat wisi do czasu pojawienia się porządnej biblioteki bluetooth
    standardowo do 10 m

    OdpowiedzUsuń