Përmbajtje:
- Hapi 1: Cilat janë të gjitha ato kushte?
- Hapi 2: Hardueri
- Hapi 3: Softueri
- Hapi 4: Shërbimet dhe Karakteristikat e BLE
- Hapi 5: Komandat e tekstit
- Hapi 6: Uebfaqja
- Hapi 7: Javascript dhe Web Bluetooth
- Hapi 8: Pjesa PWA
Video: Nano 33 IoT + EC/pH/ORP + WebAPK: 8 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:19
Ndiqni më shumë nga autori:
Rreth: Shtoni aftësinë për të matur pH, ORP, EC ose kripësinë në projektin tuaj Arduino ose Raspberry Pi. Më shumë rreth ufire »
Një pajisje për të matur EC, pH, ORP dhe temperaturën. Mund të përdoret për të monitoruar një pishinë ose konfigurim hidroponik. Ai do të komunikojë përmes Bluetooth Low Energy dhe do të shfaqë informacionin në një faqe në internet duke përdorur Web Bluetooth. Dhe për argëtim, ne do ta kthejmë këtë në një Aplikacion Web Progresiv që mund ta instaloni nga uebi.
Hapi 1: Cilat janë të gjitha ato kushte?
EC/pH/ORP/temperatura janë disa nga matjet më të zakonshme të cilësisë së ujit. Përçueshmëria elektrike (KE) përdoret në hidroponikë për të matur tretësirën ushqyese, pH për sa acid/bazë është uji, dhe ORP përdoret për të ndihmuar në përcaktimin e aftësisë së ujit për të dezinfektuar vetveten
- Bluetooth Low Energy është një protokoll pa tel për të dërguar dhe marrë me lehtësi informacion. Bordi Arduino i përdorur në këtë projekt është Nano 33 IoT dhe vjen me ndërfaqe WiFi dhe BLE.
- Web Bluetooth është një grup API -ve të zbatuara në shfletuesin Chrome të Google (dhe Opera) që lejojnë një faqe në internet të komunikojë drejtpërdrejt me një pajisje BLE.
- Aplikacionet Progresive të Uebit janë në thelb faqe interneti që veprojnë si aplikacione të rregullta. Android dhe iPhone i trajtojnë ato ndryshe, dhe ato janë të ndryshme në desktop, kështu që do t'ju duhet të lexoni pak për specifika.
Hapi 2: Hardueri
Para se të montojmë harduerin, ka një gjë që duhet adresuar. Pajisjet e sensorit uFire ISE vijnë me të njëjtën adresë I2C dhe ne po përdorim dy, kështu që një do të duhet të ndryshohet. Për këtë projekt, ne do të zgjedhim një nga bordet ISE dhe do ta përdorim atë për të matur ORP. Duke ndjekur hapat këtu, ndryshoni adresën në 0x3e.
Tani që adresa është ndryshuar, bashkimi i harduerit është i lehtë. Të gjitha pajisjet sensore përdorin sistemin e lidhjes Qwiic, kështu që lidhni gjithçka së bashku në një zinxhir. Do t'ju duhet një tel Qwiic to Male për të lidhur një nga sensorët me Nano 33. Telat janë të qëndrueshëm dhe të koduar me ngjyra. Lidheni ngjyrën e zezë me GND të Nano -s, të kuqe ose me pinin +3.3V ose +5V, blu me kunjin SDA që është A4 dhe të verdhë me kunjin SCL në A5.
Për këtë projekt, ai do të presë që informacioni i temperaturës të vijë nga sensori EC, prandaj sigurohuni që të bashkëngjitni një sensor të temperaturës në tabelën EC. Të gjitha bordet kanë aftësinë për të matur temperaturën. Mos harroni të lidhni sondat EC, pH dhe ORP në sensorët e duhur. Ato lidhen lehtësisht me lidhëset BNC.
Nëse keni një rrethim, vendosja e gjithë kësaj brenda do të ishte një ide e mirë, veçanërisht duke pasur parasysh që uji do të përfshihet.
Hapi 3: Softueri
Pjesa e softuerit e kësaj është e ndarë në dy seksione kryesore: firmware në Nano 33 dhe uebfaqe.
Rrjedha themelore është kjo:
- Faqja e internetit lidhet me Nano përmes BLE
- Faqja në internet dërgon komanda të bazuara në tekst për të kërkuar informacion ose për të ndërmarrë veprime
- Nano i dëgjon ato komanda, i ekzekuton ato dhe kthen informacionin
- Faqja në internet merr përgjigjet dhe përditëson UI në përputhje me rrethanat
Ky konfigurim lejon që uebfaqja të kryejë të gjitha funksionet e kërkuara që do të prisnit, si për shembull të bëni një matje ose të kalibroni sensorët.
Hapi 4: Shërbimet dhe Karakteristikat e BLE
Një nga gjërat e para për të mësuar janë bazat se si funksionon BLE.
Ka shumë analogji, kështu që le të zgjedhim një libër. Një shërbim do të ishte një libër, dhe një karakteristikë do të ishin faqet. Në këtë "libër BLE", faqet kanë disa veti jo-librash si të qenit në gjendje të ndryshojnë atë që thotë faqja dhe të marrin një njoftim kur të ndodhë.
Një pajisje BLE mund të bëjë sa më shumë shërbime që dëshiron. Disa janë të paracaktuara dhe veprojnë si një mënyrë për të standardizuar informacionin e përdorur zakonisht si Tx Power ose humbjen e një lidhjeje, për gjëra më specifike si Insulina ose Oksimetria e Pulsit. Ju gjithashtu mund të bëni vetëm një dhe të bëni çfarë të doni me të. Ato përcaktohen në softuer dhe identifikohen me një UUID. Këtu mund të bëni UUID.
Në firmware për këtë pajisje, ekziston një shërbim, i përcaktuar si:
BLEService uFire_Service ("4805d2d0-af9f-42c1-b950-eae78304c408");
dhe dy karakteristika:
BLEStringCharacteristic tx_Characteristic ("50fa7d80-440a-44d2-967a-ec7731ec736a", BLENotify, 20);
BLEStringCharacteristic rx_Characteristic ("50fa7d80-440b-44d2-967b-ec7731ec736b", BLEWrite, 20);
Tx_Characteristic do të jetë vendi ku pajisjet dërgon informacionin, si matjet EC, që faqja e internetit të shfaqet. Rx_Characteristic është vendi ku do të marrë komanda nga uebfaqja për tu ekzekutuar.
Ky projekt përdor bibliotekën ArduinoBLE. Nëse shikoni, do të shihni se ka një çift të ndryshëm nga të shpallurit një karakteristikë. Ky projekt përdor BLEStringCharacteristic sepse do të merremi me llojin String dhe është thjesht më e lehtë, por ju gjithashtu mund të zgjidhni BLECharCharacteristic ose BLEByteCharacteristic nga një pjesë e vogël e të tjerëve.
Për më tepër, ka disa veti që mund t'i jepni karakteristikës. tx_Characteristic ka BLENotify si një opsion. Kjo do të thotë që faqja jonë e internetit do të marrë një njoftim kur vlera e saj të ndryshojë. rx_Characteristic ka BLEWrite i cili do të lejojë që faqja jonë e internetit ta modifikojë atë. Ka të tjerë.
Pastaj ka pak ngjitës kodesh për t'i lidhur të gjitha këto gjëra së bashku:
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. reklamoni ();
Moreshtë pak a shumë vetë-shpjeguese, por le të prekim disa pika.
rx_Characteristic.setEventHandler (BLEWritten, rxCallback);
Whereshtë vendi ku përfitoni nga njoftimi për vlerën që ndryshohet. Linja i thotë klasës të ekzekutojë funksionin rxCallback kur vlera ndryshohet.
BLE. reklamoni ();
është ajo që fillon të shkojë e tëra. Një pajisje BLE do të dërgojë periodikisht një paketë të vogël informacioni duke njoftuar se është atje dhe e disponueshme për t'u lidhur. Pa të, do të jetë e padukshme.
Hapi 5: Komandat e tekstit
Siç u përmend më herët, kjo pajisje do të flasë me faqen në internet përmes komandave të thjeshta të tekstit. E gjithë gjëja është e lehtë për t’u zbatuar sepse puna e vështirë tashmë është bërë. Sensorët uFire vijnë me një bibliotekë të bazuar në JSON dhe MsgPack për dërgimin dhe marrjen e komandave. Mund të lexoni më shumë rreth komandave EC dhe ISE në faqet e tyre të dokumentacionit.
Ky projekt do të përdorë JSON sepse është pak më e lehtë të punosh dhe të lexosh, ndryshe nga formati MsgPack i cili është binar.
Këtu është një shembull se si të gjitha lidhen së bashku:
- Faqja e internetit kërkon pajisjen për një matje EC duke dërguar ek (ose më konkretisht duke shkruar ec në karakteristikën rx_Karakteristike)
- Pajisja merr komandën dhe e ekzekuton atë. Pastaj dërgon një përgjigje të formatuar JSON të {"ec": 1.24} duke i shkruar karakteristikës tx_Characteristic.
- Faqja në internet merr informacionin dhe e shfaq atë
Hapi 6: Uebfaqja
Faqja në internet për këtë projekt do të përdorë Vue.js për pjesën e përparme. Asnjë backend nuk është i nevojshëm. Për më tepër, për t'i mbajtur gjërat pak më të thjeshta, nuk përdoret asnjë sistem ndërtimi. It'sshtë ndarë në dosjet e zakonshme, js për javascript, css për CSS, asete për ikonat. Pjesa html e saj nuk është asgjë e veçantë. Ai përdor bulma.io për stilimin dhe krijon ndërfaqen e përdoruesit. Do të vini re shumë në seksion. It'sshtë duke shtuar të gjitha css dhe ikonat, por gjithashtu duke shtuar një rresht në veçanti.
Kjo po ngarkon skedarin tonë manifest.json që është ajo që i bën të gjitha gjërat PWA të ndodhin. Ai deklaron disa informacione që i tregojnë telefonit tonë se kjo faqe në internet mund të shndërrohet në një aplikacion.
Javascript është vendi ku ndodhin shumica e gjërave interesante. It'sshtë e ndarë në skedarë, app.js përmban bazat e marrjes së një uebfaqeje Vue së bashku me të gjitha ndryshoret e lidhura me UI dhe disa gjëra të tjera. ble.js ka gjëra bluetooth.
Hapi 7: Javascript dhe Web Bluetooth
Së pari, kjo funksionon vetëm në Chrome dhe Opera. Uroj që shfletuesit e tjerë ta mbështesin këtë, por për çfarëdo arsye, ata nuk e bëjnë. Hidhini një sy app.js dhe do të shihni të njëjtat UUID që kemi përdorur në firmware -in tonë. Një për Shërbimin uFire, dhe një secila për karakteristikat tx dhe rx.
Tani nëse shikoni në ble.js, do të shihni funksionet e lidhjes () dhe shkyçjes ().
Funksioni i lidhjes () përmban njëfarë logjike për të mbajtur UI në sinkron, por kryesisht është duke i vendosur gjërat për të dërguar dhe marrë informacion mbi karakteristikat.
Ka disa idiosinkrazi kur merren me Web Bluetooth. Lidhja duhet të fillohet nga një lloj ndërveprimi fizik i përdoruesit, si prekja e një butoni. Ju nuk mund të lidheni në mënyrë programore kur faqja e internetit është e ngarkuar, për shembull.
Kodi për të filluar një lidhje duket kështu:
this.device = pres navigator.bluetooth.requestDevice ({
filtrat: [{namePrefix: "uFire"}], shërbimet opsionale: [this.serviceUuid]});
Seksioni i filtrave: dhe shërbimet opsionale nevojitet për të shmangur shikimin e çdo pajisje të vetme BLE atje. Ju do të mendonit se vetëm seksioni i filtrit do të ishte mirë, por gjithashtu keni nevojë për pjesën opsionale të Shërbimeve gjithashtu.
Kodi i mësipërm do të tregojë një dialog lidhjeje. Partshtë pjesë e ndërfaqes Chrome dhe nuk mund të ndryshohet. Përdoruesi do të zgjedhë nga lista. Edhe nëse ka vetëm një pajisje me të cilën aplikacioni do të lidhej ndonjëherë, përdoruesi ende duhet të kalojë nëpër këtë dialog përzgjedhjeje, për shkak të shqetësimeve të sigurisë.
Pjesa tjetër e kodit është vendosja e shërbimit dhe karakteristikave. Merrni parasysh se ne kemi krijuar një rutinë të kthimit të thirrjeve, e ngjashme me reagimin e njoftimit të firmware -it:
shërbim = pres server.getPrimaryService (this.serviceUuid);
karakteristike = pres shërbimin.getCharacteristic (this.txUuid); pres karakteristikë.filloNjoftimet (); karakteristike.addEventListener ("karakteristikevlera e ndryshuar", this.value_update);
this.value_update tani do të thirret sa herë që ka informacion të ri mbi karakteristikën tx.
Një nga gjërat e fundit që bën është të vendosni një kohëmatës për të azhurnuar informacionin çdo 5 sekonda.
value_update () është vetëm një funksion i gjatë që pret që informacioni i ri JSON të hyjë dhe përditëson UI me të.
ec.js, ph.js dhe orp.js përmbajnë shumë funksione të vogla që dërgojnë komandat për të marrë informacion dhe për të kalibruar pajisjet.
Për ta provuar këtë, duhet të keni parasysh se për të përdorur Web Bluetooth, duhet të shërbehet përmes HTTPS. Një nga shumë opsionet për një server lokal HTTPS është shërbimi-https. Me firmuerin e ngarkuar, gjithçka të lidhur dhe uebfaqen që po servohet, duhet të jeni në gjendje të shihni gjithçka që funksionon.
Hapi 8: Pjesa PWA
Ka disa hapa për ta kthyer faqen në një aplikacion aktual. Aplikacionet Progresive të Uebit mund të bëjnë shumë më tepër sesa i përdor ky projekt.
- Instalimi i faqes në internet
- Pasi të jetë instaluar, qasja jashtë linje është e mundur
- Filloi dhe funksionon si një aplikacion normal me një ikonë të aplikacionit me pamje të rregullt
Për të filluar, do të na duhet të krijojmë një mori skedarësh. E para është një skedar manifest.json. Ka një sërë faqesh që do ta bëjnë këtë për ju, App Manifest Generator, duke qenë një prej tyre.
Disa gjëra për të kuptuar:
- Fusha e aplikimit është e rëndësishme. Unë e vendos këtë faqe në ufire.co/uFire-BLE/. Kjo do të thotë se qëllimi im i aplikimit është /uFire-BLE /.
- URL -ja e fillimit është gjithashtu e rëndësishme. Shtë rruga për në uebfaqen tuaj të veçantë me domenin bazë të supozuar tashmë. Pra, për shkak se e vendosa këtë në ufire.co/uFire-BLE/, URL-ja e fillimit është/uFire-BLE/gjithashtu.
- Modaliteti i ekranit do të përcaktojë se si duket aplikacioni, i pavarur do ta bëjë atë të duket të jetë një aplikacion i rregullt pa asnjë buton ose ndërfaqe të Chrome.
Do të përfundoni me një skedar json. Duhet të vendoset në rrënjë të faqes së internetit, së bashku me index.html.
Gjëja tjetër që do t'ju duhet është një Punëtor i Shërbimit. Përsëri, ata mund të bëjnë shumë, por ky projekt do të përdorë vetëm caching për të lejuar që ky aplikacion të arrihet jashtë linje. Zbatimi i punonjësve të shërbimit është kryesisht kazan. Ky projekt përdori shembullin e Google dhe ndryshoi listën e skedarëve që do të ruhen. Ju nuk mund të ruani skedarët jashtë domenit tuaj.
Shkoni te FavIcon Generator dhe bëni disa ikona.
Gjëja e fundit është të shtoni një kod në funksionin Vue mounted ().
montuar: funksioni () {if ('serviceWorker' në navigator) {navigator.serviceWorker.register ('service-punëtor.js'); }}
Kjo do të regjistrojë punonjësin me shfletuesin.
Ju mund të kontrolloni që gjithçka po funksionon, dhe nëse jo, ndoshta kuptoni pse duke përdorur Lighthouse, do të analizojë faqen dhe do t'ju tregojë të gjitha llojet e gjërave.
Nëse gjithçka funksionoi, kur shkoni në faqen në internet, Chrome do t'ju pyesë nëse doni ta instaloni me një flamur popup. Mund ta shihni në veprim në ufire.co/uFire-BLE/ nëse jeni në celularin Chrome. Nëse jeni në një desktop, mund të gjeni një artikull menuje për ta instaluar atë.