Sadržaj:
- Korak 1: Koji su svi ti uvjeti?
- Korak 2: Hardver
- Korak 3: Softver
- Korak 4: BLE usluge i karakteristike
- Korak 5: Tekstualne naredbe
- Korak 6: Web stranica
- Korak 7: Javascript i web Bluetooth
- Korak 8: PWA dio
Video: Nano 33 IoT + EC/pH/ORP + WebAPK: 8 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
Autor ufireFollow Više od autora:
O: Dodajte mogućnost mjerenja pH, ORP, EC ili saliniteta u svoj Arduino ili Raspberry Pi projekt. Više o ufireu »
Uređaj za mjerenje EC, pH, ORP i temperature. Može se koristiti za nadzor bazena ili hidroponskih postavki. Komunicirat će putem Bluetootha s niskom potrošnjom energije i prikazati podatke na web stranici pomoću web Bluetootha. Za zabavu ćemo ovo pretvoriti u progresivnu web aplikaciju koju možete instalirati s weba.
Korak 1: Koji su svi ti uvjeti?
EC/pH/ORP/temperatura neka su od najčešćih mjerenja kvalitete vode. Električna vodljivost (EC) koristi se u hidroponici za mjerenje hranjive otopine, pH koliko je voda kisela/bazična, a ORP se koristi za utvrđivanje sposobnosti vode da se dezinficira
- Bluetooth Low Energy je bežični protokol za jednostavno slanje i primanje informacija. Arduino ploča koja se koristi u ovom projektu je Nano 33 IoT i dolazi s WiFi i BLE sučeljima.
- Web Bluetooth skup je API -ja implementiranih u Googleov preglednik Chrome (i Opera) koji web stranici omogućuju izravnu komunikaciju s BLE uređajem.
- Progresivne web aplikacije u osnovi su web stranice koje se ponašaju poput običnih aplikacija. Android i iPhone različito se nose s njima, a različiti su i na stolnim računalima pa ćete morati malo pročitati radi pojedinosti.
Korak 2: Hardver
Prije nego što možemo sastaviti hardver, moramo se pozabaviti jednom stvari. UFire ISE senzorski uređaji dolaze s istom I2C adresom, a mi koristimo dvije, pa ćemo jednu morati promijeniti. Za ovaj projekt odabrat ćemo jednu od ISE ploča i upotrijebiti je za mjerenje ORP -a. Slijedite ovdje navedene korake, promijenite adresu u 0x3e.
Sada kada se adresa promijenila, sastavljanje hardvera je jednostavno. Svi senzorski uređaji koriste sustav Qwiic connect pa samo sve spojite u lanac. Trebat će vam jedna žica Qwiic -Male za spajanje jednog od senzora na Nano 33. Žice su dosljedne i kodirane u boji. Spojite crno na Nano -ov GND, crveno na +3.3V ili +5V pin, plavo na SDA pin A4, a žuto na SCL pin na A5.
Za ovaj projekt očekuje se da će informacije o temperaturi doći od EC senzora, stoga svakako priključite osjetnik temperature na EC ploču. Sve ploče imaju mogućnost mjerenja temperature. Ne zaboravite spojiti EC, pH i ORP sonde na odgovarajuće senzore. Lako se pričvršćuju pomoću BNC konektora.
Ako imate kućište, bilo bi dobro staviti sve ovo unutra, pogotovo ako uzmete u obzir vodu.
Korak 3: Softver
Softverski dio ovoga podijeljen je u dva glavna odjeljka: firmver na Nano 33 i web stranicu.
Osnovni tok je sljedeći:
- Web stranica se povezuje s Nano putem BLE -a
- Web stranica šalje tekstualne naredbe za traženje informacija ili poduzimanje radnji
- Nano sluša te naredbe, izvršava ih i vraća informacije
- Web stranica prima odgovore i u skladu s tim ažurira korisničko sučelje
Ovo postavljanje omogućuje web stranici da izvrši sve potrebne funkcije koje očekujete, primjerice izvrši mjerenje ili kalibrira senzore.
Korak 4: BLE usluge i karakteristike
Jedna od prvih stvari koju treba naučiti su osnove rada BLE -a.
Postoji mnogo analogija, pa hajde da odaberemo knjigu. Usluga bi bila knjiga, a karakteristika stranice. U ovoj "BLE knjizi" stranice imaju nekoliko neknjižnih svojstava poput mogućnosti mijenjanja onoga što stranica kaže i primanja obavijesti kada se to dogodi.
BLE uređaj može napraviti onoliko usluga koliko želi. Neki su unaprijed definirani i djeluju kao način za standardizaciju uobičajeno korištenih informacija kao što je Tx Power ili gubitak veze, na specifičnije stvari poput inzulina ili pulsne oksimetrije. Također možete jednostavno napraviti jedan i s njim raditi što god želite. Oni su definirani u softveru i identificirani su UUID -om. Ovdje možete napraviti UUID -ove.
U firmveru za ovaj uređaj postoji jedna usluga, definirana kao:
BLEService uFire_Service ("4805d2d0-af9f-42c1-b950-eae78304c408");
i dvije karakteristike:
BLEStringCharacteristic tx_Characteristic ("50fa7d80-440a-44d2-967a-ec7731ec736a", BLENotify, 20);
BLEStringCharacteristic rx_Characteristic ("50fa7d80-440b-44d2-967b-ec7731ec736b", BLEWrite, 20);
Tx_Characteristic će biti mjesto gdje uređaji šalju informacije, poput EC mjerenja, za prikaz web stranice. Rx_Characteristic je mjesto gdje će primati naredbe sa web stranice za izvršavanje.
Ovaj projekt koristi biblioteku ArduinoBLE. Ako pogledate, vidjet ćete da postoji nekoliko različitih načina deklariranja karakteristika. Ovaj projekt koristi BLEStringCharacteristic jer ćemo se baviti vrstom String i jednostavno je lakše, ali možete odabrati i BLECharCharacteristic ili BLEByteCharacteristic među nekolicinom drugih.
Osim toga, postoje neka svojstva kojima možete dati karakteristiku. tx_Characteristic ima opciju BLENotify. To znači da će naša web stranica primiti obavijest kada se promijeni njezina vrijednost. rx_Characteristic ima BLEWrite koji će našoj web stranici omogućiti izmjenu. Ima i drugih.
Zatim postoji malo ljepila koda za povezivanje svih ovih stvari:
BLE.setLocalName ("uFire BLE");
BLE.setAdvertisedService (uFire_Service); uFire_Service.addCharacteristic (tx_Characteristic); uFire_Service.addCharacteristic (rx_Characteristic); BLE.addService (uFire_Service); rx_Characteristic.setEventHandler (BLEWritten, rxCallback); BLE.advertise ();
To je manje-više samo po sebi razumljivo, ali dotaknimo se nekoliko točaka.
rx_Characteristic.setEventHandler (BLEWritten, rxCallback);
Tamo možete iskoristiti prednost dobivanja obavijesti o promjeni vrijednosti. Redak govori klasi da izvrši funkciju rxCallback kad se promijeni vrijednost.
BLE.advertise ();
to je ono što pokreće cijelu stvar. BLE uređaj će povremeno slati mali paket informacija koji objavljuje da je vani i dostupan za povezivanje. Bez toga će biti nevidljiv.
Korak 5: Tekstualne naredbe
Kao što je ranije spomenuto, ovaj uređaj će razgovarati s web stranicom putem jednostavnih tekstualnih naredbi. Cijelu je stvar lako implementirati jer je naporan posao već obavljen. UFire senzori dolaze s knjižnicom zasnovanom na JSON -u i MsgPacku za slanje i primanje naredbi. Više o naredbama EC i ISE možete pročitati na njihovim stranicama s dokumentacijom.
Ovaj će projekt koristiti JSON jer je s njim malo lakše raditi i čitati ga, za razliku od binarnog formata MsgPack.
Evo primjera kako se sve to povezuje:
- Web stranica od uređaja traži EC mjerenje slanjem ec (ili točnije pisanjem ec na rx_karakterističnu karakteristiku)
- Uređaj prima naredbu i izvršava je. Zatim šalje natrag JSON formatiran odgovor od {"ec": 1.24} pisanjem na karakteristiku tx_Characteristic.
- Web stranica prima informacije i prikazuje ih
Korak 6: Web stranica
Web stranica za ovaj projekt koristit će Vue.js za front-end. Pozadina nije potrebna. Osim toga, kako bi stvari bile jednostavnije, ne koristi se nikakav sustav gradnje. Podijeljen je na uobičajene mape, js za javascript, css za CSS, sredstva za ikone. Njegov html dio nije ništa posebno. Za oblikovanje koristi bulma.io i stvara korisničko sučelje. U odjeljku ćete puno primijetiti. Dodaje sve css i ikone, ali i dodaje jedan redak posebno.
To učitava našu datoteku manifest.json zbog čega se događaju sve PWA stvari. Deklarira neke podatke koji govore našem telefonu da se ova web stranica može pretvoriti u aplikaciju.
Javascript je mjesto gdje se događa većina zanimljivih stvari. Raščlanjen je na datoteke, app.js sadrži osnove postavljanja Vue web stranice zajedno sa svim varijablama povezanim s korisničkim sučeljem i nekoliko drugih stvari. ble.js ima bluetooth stvari.
Korak 7: Javascript i web Bluetooth
Prvo, ovo radi samo na Chromeu i Operi. Volio bih da drugi preglednici podržavaju ovo, ali iz bilo kojeg razloga, oni to ne podržavaju. Pogledajte app.js i vidjet ćete iste UUID -ove koje smo koristili u svom firmveru. Jedan za uslugu uFire i po jedan za karakteristike tx i rx.
Ako pogledate u ble.js, vidjet ćete funkcije connect () i disconnect ().
Funkcija connect () sadrži logiku za održavanje sinkronizacije korisničkog sučelja, ali uglavnom postavlja stvari za slanje i primanje informacija o karakteristikama.
Postoje neke posebnosti kada se radi o web -u Bluetooth. Veza se mora pokrenuti nekom vrstom fizičke interakcije korisnika, poput dodira gumba. Ne možete se programski povezati, primjerice, kada se učita web stranica.
Kôd za pokretanje veze izgleda ovako:
this.device = čekajte navigator.bluetooth.requestDevice ({
filtri: [{namePrefix: "uFire"}], neobavezneUsluge: [this.serviceUuid]});
Odjeljak Filtri: i opcionalne usluge potrebni su kako biste izbjegli viđenje svakog pojedinog BLE uređaja vani. Pomislili biste da bi samo dio s filterom bio u redu, ali trebate i dodatni dio Servisi.
Gornji kôd će prikazati dijaloški okvir za povezivanje. To je dio Chrome sučelja i ne može se promijeniti. Korisnik će odabrati s popisa. Čak i ako postoji samo jedan uređaj s kojim bi se aplikacija mogla povezati, korisnik će zbog sigurnosnih razloga ipak morati proći kroz ovaj dijaloški okvir za odabir.
Ostatak koda je postavljanje usluge i karakteristika. Imajte na umu da smo postavili rutinu povratnog poziva, slično povratnom pozivu obavijesti firmvera:
service = await server.getPrimaryService (this.serviceUuid);
karakteristika = čekaju uslugu.getCharacteristic (this.txUuid); čekati karakterističnu.startNotifications (); karakteristika.addEventListener ("karakteristična vrijednost promijenjena", ova.vrijednost_ ažuriranje);
this.value_update će se sada pozivati svaki put kad se pojave nove informacije o tx karakteristici.
Jedna od posljednjih stvari je postavljanje mjerača vremena za ažuriranje informacija svakih 5 sekundi.
value_update () samo je duga funkcija koja čeka da dođu nove JSON informacije i ažurira korisničko sučelje s njom.
ec.js, ph.js i orp.js sadrže mnoge male funkcije koje šalju naredbe za dohvaćanje informacija i kalibriranje uređaja.
Da biste to pokušali, morate imati na umu da se za korištenje web Bluetootha mora posluživati putem HTTPS -a. Jedna od mnogih opcija za lokalni HTTPS poslužitelj je serve-https. S učitanim firmverom, svime povezanim i posluživanjem web stranice, trebali biste vidjeti da sve radi.
Korak 8: PWA dio
Postoji nekoliko koraka za pretvaranje web stranice u stvarnu aplikaciju. Progresivne web aplikacije mogu učiniti mnogo više nego što ih ovaj projekt koristi.
- Instalacija web stranice
- Nakon instalacije moguć je izvanmrežni pristup
- Pokrenuta i radi kao normalna aplikacija s ikonom aplikacije uobičajenog izgleda
Za početak ćemo morati generirati hrpu datoteka. Prva je datoteka manifest.json. Postoji nekoliko web lokacija koje će to učiniti umjesto vas, App Manifest Generator, koji je jedno od njih.
Nekoliko stvari koje treba razumjeti:
- Opseg primjene je važan. Ovu web stranicu postavio sam na ufire.co/uFire-BLE/. To znači da je opseg moje aplikacije /uFire-BLE /.
- Početni URL je također važan. To je put do vaše određene web stranice s već pretpostavljenom osnovnom domenom. Pa zato što sam ovo stavio na ufire.co/uFire-BLE/, početni URL je/uFire-BLE/.
- Način prikaza će odrediti kako aplikacija izgleda, Samostalna će učiniti da izgleda kao obična aplikacija bez ikakvih gumba ili sučelja za Chrome.
Na kraju ćete dobiti json datoteku. Mora se postaviti u korijen web stranice, zajedno s index.html.
Sljedeća stvar koju trebate je uslužni radnik. Opet, mogu učiniti mnogo, ali ovaj će projekt koristiti samo predmemoriranje kako bi ovoj aplikaciji omogućio pristup izvanmrežno. Implementacija uslužnog radnika uglavnom je predodžba. Ovaj je projekt koristio Googleov primjer i promijenio popis datoteka koje se spremaju u predmemoriju. Ne možete predmemorirati datoteke izvan svoje domene.
Idite na FavIcon Generator i napravite ikone.
Posljednja stvar je dodati neki kôd u funkciju Vue mount ().
montirano: function () {if ('serviceWorker' u navigatoru) {navigator.serviceWorker.register ('service-worker.js'); }}
Ovo će registrirati radnika u pregledniku.
Možete provjeriti radi li sve, a ako ne, možda shvatiti zašto će pomoću Lighthousea analizirati web mjesto i reći vam svakakve stvari.
Ako je sve uspjelo, kada posjetite web stranicu, Chrome će vas pitati želite li je instalirati s skočnim natpisom. Možete ga vidjeti na djelu na adresi ufire.co/uFire-BLE/ ako koristite Chrome za mobilne uređaje. Ako ste na radnoj površini, možete pronaći stavku izbornika da biste je instalirali.