Turinys:
- 1 žingsnis: kokios yra visos šios sąlygos?
- 2 žingsnis: Aparatūra
- 3 žingsnis: programinė įranga
- 4 žingsnis: BLE paslaugos ir charakteristikos
- 5 veiksmas: teksto komandos
- 6 veiksmas: tinklalapis
- 7 veiksmas: „Javascript“ir žiniatinklio „Bluetooth“
- 8 žingsnis: PWA dalis
Video: „Nano 33 IoT + EC/pH/ORP + WebAPK“: 8 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Sekite daugiau autoriaus:
Apie: pridėkite galimybę išmatuoti pH, ORP, EC arba druskingumą prie „Arduino“ar „Raspberry Pi“projekto. Daugiau apie ufire »
Prietaisas EC, pH, ORP ir temperatūrai matuoti. Jis gali būti naudojamas stebėti baseiną ar hidroponiką. Jis bendraus per „Bluetooth Low Energy“ir rodys informaciją tinklalapyje naudodami „Web Bluetooth“. Pramogoms tai paversime progresyvia žiniatinklio programa, kurią galite įdiegti iš žiniatinklio.
1 žingsnis: kokios yra visos šios sąlygos?
EC/pH/ORP/temperatūra yra vieni iš labiausiai paplitusių vandens kokybės matavimų. Elektros laidumas (EC) naudojamas hidroponikoje matuoti maistinį tirpalą, pH, kiek rūgštus/bazinis vanduo, o ORP naudojamas siekiant nustatyti vandens gebėjimą dezinfekuoti save
- „Bluetooth Low Energy“yra belaidis protokolas, skirtas lengvai siųsti ir gauti informaciją. Šiame projekte naudojama „Arduino“plokštė yra „Nano 33 IoT“su „WiFi“ir BLE sąsajomis.
- „Web Bluetooth“yra „Google“„Chrome“naršyklėje (ir „Opera“) įdiegtų API rinkinys, leidžiantis tinklalapiui tiesiogiai bendrauti su BLE įrenginiu.
- Progresyvios žiniatinklio programos iš esmės yra tinklalapiai, kurie veikia kaip įprastos programos. „Android“ir „iPhone“juos tvarko skirtingai, o staliniuose kompiuteriuose jie yra skirtingi, todėl turėsite šiek tiek perskaityti, kad sužinotumėte specifiką.
2 žingsnis: Aparatūra
Prieš surinkdami aparatūrą, turime atkreipti dėmesį į vieną dalyką. „UFire ISE“jutiklių įrenginiai turi tą patį I2C adresą, o mes naudojame du, todėl vieną teks pakeisti. Šiam projektui mes pasirinksime vieną iš ISE plokščių ir naudosime ją ORP matavimui. Atlikę čia nurodytus veiksmus, pakeiskite adresą į 0x3e.
Dabar, kai pasikeitė adresas, sudėti aparatūrą yra paprasta. Visi jutiklių įrenginiai naudoja „Qwiic connect“sistemą, todėl tiesiog viską sujunkite grandine. Norėdami prijungti vieną iš jutiklių prie „Nano 33.“, jums reikės vieno „Qwiic“ir „Male“laido. Laidai yra nuoseklūs ir spalvoti. Prijunkite juodą prie „Nano“GND, raudoną - prie +3,3 V arba +5 V kaiščio, mėlyną - prie A4 SDA kaiščio, o geltoną - prie SC5 kaiščio A5.
Šiame projekte jis tikisi, kad temperatūros informacija bus gauta iš EB jutiklio, todėl būtinai pritvirtinkite temperatūros jutiklį prie EC plokštės. Tačiau visos plokštės turi galimybę matuoti temperatūrą. Nepamirškite prijungti EC, pH ir ORP zondų prie atitinkamų jutiklių. Jie lengvai pritvirtinami naudojant BNC jungtis.
Jei turite aptvarą, visa tai įdėti į vidų būtų gera idėja, ypač atsižvelgiant į tai, kad bus įtrauktas vanduo.
3 žingsnis: programinė įranga
Programinės įrangos dalis yra padalinta į dvi pagrindines dalis: „Nano 33“programinę -aparatinę įrangą ir tinklalapį.
Pagrindinis srautas yra toks:
- Tinklalapis prisijungia prie „Nano“per BLE
- Tinklalapis siunčia tekstines komandas, kad paprašytų informacijos arba imtųsi veiksmų
- „Nano“klauso tų komandų, jas vykdo ir pateikia informaciją
- Tinklalapis gauna atsakymus ir atitinkamai atnaujina vartotojo sąsają
Ši sąranka leidžia tinklalapiui atlikti visas reikalingas funkcijas, kurių galite tikėtis, pvz., Išmatuoti ar kalibruoti jutiklius.
4 žingsnis: BLE paslaugos ir charakteristikos
Vienas iš pirmųjų dalykų, kuriuos reikia išmokti, yra BLE veikimo pagrindai.
Yra daug analogijų, todėl pasirinkite knygą. Paslauga būtų knyga, o savybė - puslapiai. Šioje „BLE knygoje“puslapiuose yra keletas ne knygų savybių, pavyzdžiui, galimybė keisti puslapio tekstą ir gauti pranešimą, kai tai atsitinka.
BLE įrenginys gali teikti tiek paslaugų, kiek nori. Kai kurie yra iš anksto nustatyti ir veikia kaip būdas standartizuoti dažniausiai naudojamą informaciją, pvz., „Tx Power“arba ryšio praradimą, prie konkretesnių dalykų, tokių kaip insulinas ar pulso oksimetrija. Taip pat galite tiesiog padaryti vieną ir daryti su juo viską, ko norite. Jie yra apibrėžti programinėje įrangoje ir yra identifikuojami su UUID. Čia galite sukurti UUID.
Šio įrenginio programinėje įrangoje yra viena paslauga, apibrėžta taip:
„BLEService uFire_Service“(„4805d2d0-af9f-42c1-b950-eae78304c408“);
ir dvi savybės:
BLEStringCharacteristic tx_Characteristic ("50fa7d80-440a-44d2-967a-ec7731ec736a", BLENotify, 20);
BLEStringCharacteristic rx_Characteristic ("50fa7d80-440b-44d2-967b-ec7731ec736b", BLEWrite, 20);
Tx_Charakteristika bus vieta, kur prietaisai siunčia informaciją, pvz., EB matavimus, kad būtų rodomas tinklalapis. „Rx_Characteristic“yra vieta, kur ji gaus vykdymo komandas iš tinklalapio.
Šiame projekte naudojama „ArduinoBLE“biblioteka. Jei pažvelgsite, pamatysite, kad pora skiriasi nuo savybių. Šiame projekte naudojama „BLEStringCharacteristic“, nes mes susidursime su „String“tipu ir tai bus paprasčiau, tačiau taip pat galite pasirinkti BLECharCharacteristic arba BLEByteCharacteristic iš kelių kitų.
Be to, yra keletas savybių, kurioms galite suteikti charakteristiką. „tx_Characteristic“turi BLENotify kaip pasirinkimą. Tai reiškia, kad mūsų tinklalapis gaus pranešimą, kai jo vertė pasikeis. „rx_Characteristic“turi „BLEWrite“, kuris leis mūsų tinklalapiui jį pakeisti. Yra ir kitų.
Tada yra šiek tiek kodo klijų, kad susietumėte visus šiuos dalykus:
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.reklama ();
Tai daugiau ar mažiau savaime suprantama, bet palieskime keletą punktų.
rx_Characteristic.setEventHandler (BLEWritten, rxCallback);
Tai kur jūs pasinaudojate pranešimu apie pakeistą vertę. Eilutė liepia klasei vykdyti funkciją rxCallback, kai vertė pakeičiama.
BLE.reklama ();
nuo ko viskas prasideda. BLE įrenginys periodiškai išsiųs nedidelį informacijos paketą, pranešdamas, kad jis yra ir yra prieinamas prisijungti. Be jo jis bus nematomas.
5 veiksmas: teksto komandos
Kaip minėta anksčiau, šis įrenginys kalbės su tinklalapiu per paprastas teksto komandas. Visa tai lengva įgyvendinti, nes sunkus darbas jau buvo atliktas. „UFire“jutikliai komplektuojami su JSON ir „MsgPack“biblioteka komandoms siųsti ir priimti. Daugiau apie EC ir ISE komandas galite perskaityti jų dokumentacijos puslapiuose.
Šis projektas naudos JSON, nes su juo šiek tiek lengviau dirbti ir skaityti, skirtingai nei dvejetainis „MsgPack“formatas.
Štai pavyzdys, kaip visa tai susiję:
- Tinklalapis prašo įrenginio atlikti EK matavimą siunčiant ec (arba tiksliau rašant ec į rx_Characteristic charakteristiką)
- Įrenginys gauna komandą ir ją vykdo. Tada ji siunčia atgal į JSON suformatuotą atsakymą {"ec": 1.24} rašydamas į tx_Characteristic charakteristiką.
- Tinklalapis gauna informaciją ir ją parodo
6 veiksmas: tinklalapis
Šio projekto tinklalapyje bus naudojama „Vue.js“. Nereikia jokios foninės sistemos. Be to, kad viskas būtų šiek tiek paprasčiau, nenaudojama kūrimo sistema. Jis suskirstytas į įprastus aplankus, „JavaScript“„js“, CSS - „CSS“, piktogramų išteklius. Jo html dalis nėra nieko ypatingo. Jis naudoja bulma.io stiliui ir sukuria vartotojo sąsają. Skyriuje daug pastebėsite. Tai prideda visus CSS ir piktogramas, bet taip pat prideda vieną eilutę.
Tai įkelia mūsų manifest.json failą, dėl kurio įvyksta visi PWA dalykai. Jame deklaruojama tam tikra informacija, kuri nurodo mūsų telefonui, kad šis tinklalapis gali būti paverstas programa.
„JavaScript“yra vieta, kur vyksta dauguma įdomių dalykų. Jis suskaidytas į failus, „app.js“yra pagrindai, kaip gauti „Vue“tinklalapį kartu su visais su vartotojo sąsaja susijusiais kintamaisiais ir dar keliais dalykais. ble.js turi „Bluetooth“turinį.
7 veiksmas: „Javascript“ir žiniatinklio „Bluetooth“
Pirma, tai veikia tik „Chrome“ir „Opera“. Norėčiau, kad kitos naršyklės tai palaikytų, bet dėl kokių nors priežasčių jie to nedaro. Pažvelkite į app.js ir pamatysite tuos pačius UUID, kuriuos naudojome savo programinėje įrangoje. Vienas skirtas „uFire“tarnybai, o kitas - „tx“ir „rx“charakteristikoms.
Dabar, jei pažvelgsite į ble.js, pamatysite prisijungimo () ir atjungimo () funkcijas.
Funkcijoje connect () yra tam tikra logika, leidžianti sinchronizuoti vartotojo sąsają, tačiau dažniausiai tai nustatoma norint siųsti ir gauti informaciją apie charakteristikas.
Naudojant žiniatinklio „Bluetooth“yra tam tikrų ypatumų. Ryšį turi užmegzti tam tikra fizinė vartotojo sąveika, pvz., Paspaudus mygtuką. Jūs negalite programiškai prisijungti, kai, pavyzdžiui, įkeliamas tinklalapis.
Kodas prisijungimui pradėti atrodo taip:
this.device = laukti navigator.bluetooth.requestDevice ({
filtrai: [{namePrefix: "uFire"}], pasirenkamos paslaugos: [this.serviceUuid]});
Filtrai: ir pasirinktinai Paslaugos skyrius reikalingas tam, kad nebūtų matomas kiekvienas BLE įrenginys. Jūs manote, kad tik filtrų skyrius būtų tinkamas, tačiau jums taip pat reikia papildomos paslaugų dalies.
Aukščiau pateiktas kodas parodys ryšio dialogo langą. Tai „Chrome“sąsajos dalis ir jos negalima pakeisti. Vartotojas pasirinks iš sąrašo. Net jei yra tik vienas įrenginys, prie kurio programa kada nors prisijungtų, naudotojas vis tiek turi pereiti šį pasirinkimo dialogą dėl saugumo problemų.
Likusi kodo dalis yra paslaugos ir savybių nustatymas. Atkreipkite dėmesį, kad mes nustatėme atgalinio ryšio procedūrą, panašią į programinės aparatinės įrangos pranešimo atgalinį skambutį:
paslauga = laukti serverio.getPrimaryService (this.serviceUuid);
charakteristika = laukti paslaugos.getCharacteristic (this.txUuid); laukti charakteristikos.startNotifications (); charakteristika.addEventListener ("charakteristikos vertė pakeista", tai.value_update);
this.value_update dabar bus iškviestas kiekvieną kartą, kai bus gauta nauja informacija apie tx charakteristiką.
Vienas iš paskutinių dalykų, kuriuos jis atlieka, yra nustatyti laikmatį atnaujinti informaciją kas 5 sekundes.
„value_update“() yra tik ilga funkcija, kuri laukia naujos JSON informacijos ir atnaujina su ja vartotojo sąsają.
„ec.js“, „ph.js“ir „orp.js“yra daug mažų funkcijų, kurios siunčia komandas informacijai gauti ir įrenginiams kalibruoti.
Jei norite tai išbandyti, turėkite omenyje, kad norint naudoti žiniatinklio „Bluetooth“, jis turi būti pateiktas naudojant HTTPS. Viena iš daugelio vietinio HTTPS serverio parinkčių yra „serve-https“. Įkėlus programinę -aparatinę įrangą, viską prijungus ir pateikiant tinklalapį, turėtumėte matyti, kaip viskas veikia.
8 žingsnis: PWA dalis
Norėdami paversti tinklalapį tikra programa, atlikite kelis veiksmus. Progresyvios žiniatinklio programos gali nuveikti daug daugiau, nei šis projektas jas naudoja.
- Tinklalapio diegimas
- Įdiegus galima pasiekti neprisijungus
- Paleista ir veikia kaip įprasta programa su įprastos išvaizdos programos piktograma
Norėdami pradėti, turėsime sukurti daugybę failų. Pirmasis yra manifest.json failas. Yra keletas svetainių, kurios tai padarys už jus, „App Manifest Generator“, būdama viena iš jų.
Pora dalykų, kuriuos reikia suprasti:
- Taikymo sritis yra svarbi. Įdėjau šį tinklalapį adresu ufire.co/uFire-BLE/. Tai reiškia, kad mano taikymo sritis yra /uFire-BLE /.
- Pradinis URL taip pat svarbus. Tai yra kelias į jūsų tinklalapį, kuriame jau yra numatytas pagrindinis domenas. Kadangi aš tai įdėjau į ufire.co/uFire-BLE/, pradžios URL yra/uFire-BLE/too.
- Vaizdo režimas nustatys, kaip programa atrodo, o atskira - atrodys kaip įprasta programa be jokių „Chrome“mygtukų ar sąsajos.
Galų gale turėsite „json“failą. Jis turi būti dedamas tinklalapio šaknyje kartu su index.html.
Kitas dalykas, kurio jums reikės, yra aptarnavimo darbuotojas. Vėlgi, jie gali daug nuveikti, tačiau šis projektas naudos tik talpyklą, kad šią programą būtų galima pasiekti neprisijungus. Aptarnavimo darbuotojo įgyvendinimas dažniausiai yra katilinis. Šis projektas naudojo „Google“pavyzdį ir pakeitė talpykloje esančių failų sąrašą. Negalite išsaugoti failų talpykloje už savo domeno ribų.
Eikite į „FavIcon Generator“ir padarykite keletą piktogramų.
Paskutinis dalykas yra pridėti tam tikrą kodą prie „Vue mount“() funkcijos.
montuojamas: function () {if ('serviceWorker' naršyklėje) {navigator.serviceWorker.register ('service-worker.js'); }}
Tai užregistruos darbuotoją naršyklėje.
Galite patikrinti, ar viskas veikia, o jei ne, galbūt išsiaiškinkite, kodėl naudodamiesi švyturiu, ji išanalizuos svetainę ir papasakos jums įvairiausių dalykų.
Jei viskas pavyko, eidama į tinklalapį „Chrome“paklaus, ar norite ją įdiegti su iššokančia reklamjuoste. Jei naudojate „Chrome“mobiliesiems, tai galite pamatyti veikdami adresu ufire.co/uFire-BLE/. Jei naudojate darbalaukį, galite rasti meniu elementą, kad jį įdiegtumėte.