BLE testing demo

I have been playing with Bluetooth Low Energy (BLE) and tried to setup ESP32 wireless link to my irrigation system. The both things, ESP32 micro-controller and BLE protocol are new for me so it’s very exiting to test and do experiments. Yesterday evening was fun since I succeeded to establish BLE connection between Raspberry and ESP32. I was so excited that I even recorded a video of this success. 🙂

Happenings in the video:

1. Quick presentation of the GUI

2. Scanning of ESP32 (Raspberry Pi in VNC terminal) => ESP founded as ”mpy-uart”

3. BLE connection to ESP32. => ESP32 blinks three times (long)

=> After the connection ESP32 starts to send dummy notification messages. I’ll be using these notification messages to receive moisture status data from the plants.

4. Writing ”41=enable” to ESP32. => Led turns on. Writing ”42=disable” = Led off

=> I’ll be using write commands for manual irrigation control

5. Disconnect => Led blinks several times fast

I’m using Micropython for ESP32 programming and BLE control examples which I found from the GitHub: micropython/examples/bluetooth/. I have modified the code and added led control for this demo.

Obviously, I could had been using also ESP32 Thonny Micropython terminal and USB-link to demonstrate the BLE connection, but wireless demo is more fun.

Bluetooth BLE yhteys Raspberryn ja ESP32:n välille

Odottelua ja ihmettelyä

Eipä ole isoja tapahtunut sitten viime päivityksen. Kiinasta tilatut romppeet ovat vielä matkalla ja testi-kastelujärjestelmä toimii mukavasti. Olen tehnyt vain pieniä päivityksiä, kuten esim. GUI:n valolukema on nyt luxeina, eikä referenssilukuna. Uusi yleismittarini mittaa nimittäin myös luxeja, joten sieltäpä lukemat.

Lisäksi olen yrittänyt saada serialUSB-yhteyttä ESP32-mikrokontrolleriin, jonka siis olisi tarkoitus ohjata amppeleiden kastelua jossain vaiheessa. Linuxilla tämä ei onnistunut, sillä koko USB-porttia ei löydy. Jospa Windowsilla onnistuisi, sillä nyt ainakin USB-controlleri löytyy langan päästä. Seuraava steppi on ladata joku ledin vilkutteluohjelma opiskelumielessä. Sitten voisi testailla Bluetooth/BLE-yhteyttä Raspi-ESP-puhelin -välillä. Ja sitten viimeisenä asennan kosteusmittaus- ja releen ohjausohjelman ESP:lle. Myöhemmin – jos intoa ja aikaa riittää, saman voisi tehdä Nordikin mikrokontrollerille.

Kuten jo aiemmin blogitin tai ainakin linkitin, ovat nämä moduulit siis itsenäisiä pieniä tietokoneita, jotka voi valjastaa ”pieniin tehtäviin” kuten kosteutta mittaamaan ja relettä ohjaamaan. Muodostan näihin yhteyden langattomasti Bluetoothilla Rasperrystä. Monikin voi kyseenalaistaa että onko langattomuudessa mitän järkeä – itseni mukaanlukien – sillä aika paljon helpommalla pääsisin, jos vain vetäisin pari ylimääräistä piuhaa Raspberrystä amppeleille. Mutta tätä se on. Teknonörtteily sen itsensä, eikä välttämättä järkevyyden takia. 🙂

Alhaalla kuvat ESP32:sta, Nordikin NRF51822 ja toinen ESP32 takapuolelta. Takapuolella on akkupatterille kotelo.

ESP32, NRF51822 and ESP32 from back (it has battery holder)

Miksi Raspberry, miksi ei Arduino?

Näin minulta kysyttiin heti eka päivänä kun julkaisin blogin. Myös töissä sain perustella valintaani välittömästi kun otin projektin ruokalassa puheeksi. Jos haluat lyhyen vastauksen: Se sattui ensimmäisenä käteen Verkkokaupan hyllyltä. Pidempi vastaus? – jatka lukemista… 

Kelataanpa historiaa 20 vuotta taaksepäin – aikaan jolloin Raspberryjä ja Arduinoja ei vielä ollut olemassa –  jolloin itse aloittelin ohjelmoitavien mikrokontrollerien ohjelmointia PIC16-nimisellä mikrokontrollerilla. Valjastin kyseisen kontrollerin ohjaamaan manuaalista vaihteistoa, jonka olin suunnitellut PC-autopelien ratti-poljinyhdistelmän kylkeen. Siihen aikaan ei ollut kaupallisesti sellaisia ratti-poljinyhdistelmiä, joissa olisi ollut manuaalinen vaihteisto ja käsijarru, joten päätin yrittää tehdä itse. Itse mekaniikka oli faneerista, puusta ja metallista. Vaihteen kytkeminen aiheutti suljetun piirin ja tämän informaation toimitin PIC16:lle. PIC16:lla oli sitten tilakone, joka “togletti” ratti-poljinyhdistelmän vaihteita tarvittavan määrän ylös tai alas. Systeemi toimi mainiosti ja sillä sai mahtavasti lisää fiilistä rallipeliin! En millään muista itse rallipelin nimeä, mutta se oli suomalaisten tekemä ja siinä pääsi ajamaan Ladalla, Saab 96:lla, Taunuksella ja muilla legendaarisilla vauhtihirmuilla.  

PIC16-seikkailujen jälkeen onkin ollut hiljaista ohjelmointi- ja elektroniikkarintamalla, sillä opintojen jälkeen ajauduin nopeasti hektiseen työelämään ja sen jälkeen vielä hektisempään perhe-elämään. Aika ei vaan riittänyt kaikkeen, joten harmittavasti mikrokontrolleri-harrastukseen on tullut 20-vuoden tauko. Sinä aikana on sitten tullut jotain Atmelin ohjelmoitavia piirejä, Arduino ja Raspberry. Toki sen verran seurasin rintamaa, että tiesin joidenkin tehneen Arduinoilla autotallinovien avaajia ja jotain kaljapullonavauslaskureita. Ja että taisipa niitä olla Robot Wars –tv-ohjelmassakin joitain häkkyröitä ohjaamassa. Ja Raspberryillä kuulemma sai tehtyä mediakeskuksen olohuoneeseen. Mutta siihenpä se tietämys sitten jäikin.  

Joten – hirvittävän syvällisesti en tähän projektiin pohtinut “Arduino vai Raspberry” –valintaa. Taisin käydä seuraavien tyyppisillä sivuilla: 

https://flaviocopes.com/arduino-vs-raspberry-pi/ => Täällä sanotaan, että minulle olisi riittänyt Arduino… 

https://all3dp.com/1/arduino-vs-raspberry-pi/ => Tällä sivulla sanotaan että: 

”Your first consideration should be what you want to do with it! If you need a full-blown OS and want to run multiple programs on a single computer, the Raspberry Pi is the right choice. If you just want to get one job done and also need to control external periphery, the Arduino is the superior machine.”

Ajattelin asiaa siltä kannalta, että Raspberryllä saisin käyttää tuttua Python-kieltä ohjelmointiin, Raspberry on helppo liittää telkkuun,  virtalähteeseen ja nettiin sekä käyttöjärjestelmänä olisi tuttu Linux. Raspberryllä voisin myös pyörittää useampia sovelluksia (kasvien web-kamera, palvelin, striimauskoneeksi – samalla kun se ohjaisi kastelujärjestelmää keskusyksikkönä ja toimisi langattomien anturien tukiasemana). Näihin jokaisiin varmaan Arduino-fani vastaisi, että no voihan samat tehdä Arduinollakin!? En yhtään epäile, enkä väheksy Arduinoa – vaan päinvastoin. Arduino on erittäin pätevä ja fiksu valinta samanlaiseen systeemiin mitä minulla on tulossa. Mutta minun valinta nyt vaan on Raspberry –  ja toisaiseksi olen valintaan erittäin tyytyväinen. Raspi on osoittautunut vakaaksi ja toimivaksi. Käytän sitä paitsi Arduinoon (pääasiassa) suunniteltuja anturi-moduuleja, joten olen erittäin tyytyväinen että Arduinot ovat olemassa ja että niitä moni harrastaa! 😊