Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Nano 33 IoT + EC/pH/ORP + WebAPK

Componenten en benodigdheden

Arduino Nano 33 IoT
× 1
Microfire LLC Geïsoleerde EC-sonde-interface
× 1
Microfire LLC Geïsoleerde ISE-sonde-interface
× 2

Over dit project

Wat gaan we maken?

Een apparaat om EC, pH, ORP en temperatuur te meten. Het kan worden gebruikt om een ​​zwembad- of hydrocultuuropstelling te bewaken. Het communiceert via Bluetooth Low Energy en geeft de informatie weer op een webpagina met behulp van Web Bluetooth. En voor de lol zullen we er een Progressive Web App van maken die je vanaf het web kunt installeren.

Je kunt al die dingen krijgen op ufire.co.

Wat zijn al die termen?

  • EC/pH/ORP/temperatuur zijn enkele van de meest voorkomende metingen van de waterkwaliteit. Elektrische geleidbaarheid (EC) wordt in hydrocultuur gebruikt om de voedingsoplossing te meten, de pH voor hoe zuur/basisch het water is, en ORP wordt gebruikt om het vermogen van het water om zichzelf te desinfecteren te bepalen.
  • Bluetooth Low Energy is een draadloos protocol om gemakkelijk informatie te verzenden en ontvangen. Het Arduino-bord dat in dit project wordt gebruikt, is de Nano 33 IoT en wordt geleverd met WiFi- en BLE-interfaces.
  • Web Bluetooth is een reeks API's die zijn geïmplementeerd in de Chrome-browser van Google (en Opera) waarmee een webpagina rechtstreeks kan communiceren met een BLE-apparaat.
  • Progressieve web-apps zijn in feite webpagina's die zich gedragen als gewone apps. Android en iPhone gaan er anders mee om, en ze zijn anders op desktops, dus je zult wat moeten lezen voor details.

De hardware

Voordat we de hardware kunnen monteren, moet er één ding worden aangepakt. De uFire ISE-sensorapparaten hebben hetzelfde I2C-adres en we gebruiken er twee, dus één moet worden gewijzigd. Voor dit project gaan we een van de ISE-borden kiezen en deze gebruiken om ORP te meten. Volg de stappen hier en verander het adres in 0x3e.

Nu het adres is gewijzigd, is het eenvoudig om de hardware in elkaar te zetten. Alle sensorapparaten gebruiken het Qwiic connect-systeem, dus sluit alles gewoon in een ketting aan. U hebt één Qwiic-naar-mannelijke draad nodig om een ​​van de sensoren op de Nano 33 aan te sluiten. De draden zijn consistent en hebben een kleurcode. Sluit zwart aan op de GND van de Nano, rood op de +3,3V- of +5V-pin, blauw op de SDA-pin die A4 is, en geel op de SCL-pin op A5.

Voor dit project verwacht het dat de temperatuurinformatie van de EC-sensor komt, dus zorg ervoor dat je een temperatuursensor op het EC-bord bevestigt. Alle boards hebben echter de mogelijkheid om de temperatuur te meten. Vergeet niet de EC-, pH- en ORP-sondes op de juiste sensoren te bevestigen. Ze zijn eenvoudig te bevestigen met BNC-connectoren.

Als je een omheining hebt, zou het een goed idee zijn om dit allemaal binnen te plaatsen, vooral als je bedenkt dat er water bij komt kijken.

De software

Het softwaregedeelte hiervan is opgesplitst in twee hoofdsecties:de firmware op de Nano 33 en de webpagina.

De basisstroom is deze:

  • De webpagina maakt via BLE verbinding met de Nano
  • De webpagina verzendt op tekst gebaseerde opdrachten om informatie te vragen of acties te ondernemen
  • De Nano luistert naar die commando's, voert ze uit en geeft informatie terug
  • De webpagina ontvangt de reacties en werkt de gebruikersinterface dienovereenkomstig bij

Met deze opstelling kan de webpagina alle vereiste functies uitvoeren die u zou verwachten, zoals een meting uitvoeren of de sensoren kalibreren.

BLE-services en kenmerken

Een van de eerste dingen die u moet leren, zijn de basisprincipes van hoe BLE werkt.

Er zijn veel analogieën, dus laten we een boek kiezen. Een dienst zou een boek zijn, en een kenmerk zouden de pagina's zijn. In dit "BLE-boek" hebben de pagina's een aantal niet-boekeigenschappen, zoals de mogelijkheid om te wijzigen wat de pagina zegt en het ontvangen van een melding wanneer dit gebeurt.

Een BLE-apparaat kan zoveel services maken als het wil. Sommige zijn vooraf gedefinieerd en fungeren als een manier om veelgebruikte informatie, zoals Tx Power of het verliezen van een verbinding, te standaardiseren met meer specifieke dingen zoals insuline of pulsoximetrie. Je kunt er ook gewoon een maken en ermee doen wat je wilt. Ze zijn gedefinieerd in software en worden geïdentificeerd met een UUID. Je kunt hier UUID's maken, of voor een open-source alternatief, probeer UUIDTools.com.

In de firmware voor dit apparaat is er één service, gedefinieerd als:

BLEService uFire_Service("4805d2d0-af9f-42c1-b950-eae78304c408"); 

en twee kenmerken:

BLEStringCharacteristic tx_Characteristic("50fa7d80-440a-44d2-967a-ec7731ec736a", BLENotify, 20);
BLEStringCharacteristic rx_Characteristic("50fa7d80-440b-44d2-967b-ec", 207731W736b);

De tx_Characteristic is waar de apparaten de informatie, zoals EC-metingen, naar de webpagina sturen om weer te geven. De rx_Characteristic is waar het commando's van de webpagina zal ontvangen om uit te voeren.

Dit project maakt gebruik van de ArduinoBLE-bibliotheek. Als je kijkt, zie je dat er een paar verschillende manieren zijn om een ​​kenmerk te declareren. Dit project gebruikt BLEStringCharacteristic omdat we te maken hebben met het String-type en het is gewoon makkelijker, maar je zou ook kunnen kiezen voor BLECharacteristic of BLEByteKarakteristiek uit een handvol anderen.

Daarnaast zijn er enkele eigenschappen die u het kenmerk kunt geven. tx_Characteristic heeft BLENotify als een optie. Dat betekent dat onze webpagina een melding krijgt wanneer de waarde ervan verandert. rx_Karakteristiek heeft BLEWrite waardoor onze webpagina deze kan wijzigen. Er zijn anderen.

Dan is er een beetje code-lijm om al deze dingen aan elkaar te binden:

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();

Het spreekt min of meer voor zich, maar laten we een paar punten bespreken.

rx_Characteristic.setEventHandler(BLEWritten, rxCallback); 

Hier profiteert u van een melding dat de waarde wordt gewijzigd. De regel vertelt de klasse om de functie rxCallback . uit te voeren wanneer de waarde wordt gewijzigd.

BLE.advertise(); is wat de hele zaak begint. Een BLE-apparaat stuurt periodiek een klein pakketje informatie om aan te kondigen dat het beschikbaar is en beschikbaar is om verbinding mee te maken. Zonder dit is het onzichtbaar.

Tekstopdrachten

Zoals eerder vermeld, zal dit apparaat met de webpagina praten via eenvoudige tekstopdrachten. Het geheel is eenvoudig te implementeren omdat het harde werk al is gedaan. De uFire-sensoren worden geleverd met een JSON- en MsgPack-gebaseerde bibliotheek voor het verzenden en ontvangen van opdrachten. U kunt meer lezen over de EC- en ISE-commando's op hun documentatiepagina's.

Dit project zal JSON gebruiken omdat het een beetje gemakkelijker is om mee te werken en leesbaar is, in tegenstelling tot het MsgPack-formaat dat binair is.

Hier is een voorbeeld van hoe het allemaal in elkaar zit:

  • De webpagina vraagt ​​het apparaat om een ​​EC-meting door ec . te sturen (of meer specifiek het schrijven van ec naar de rx_Karakteristiek kenmerk)
  • Het apparaat ontvangt de opdracht en voert deze uit. Het stuurt dan een JSON-geformatteerd antwoord terug van {"ec":1.24} door te schrijven naar het kenmerk tx_Characteristic.
  • De webpagina ontvangt de informatie en geeft deze weer

De webpagina

De webpagina voor dit project gebruikt Vue.js voor de front-end. Er is geen back-end nodig. Bovendien, om het een beetje eenvoudiger te houden, wordt er geen bouwsysteem gebruikt. Het is opgesplitst in de gebruikelijke mappen, js voor javascript, css voor CSS, middelen voor pictogrammen.

Het html-gedeelte ervan is niets bijzonders. Het gebruikt bulma.io voor styling en creëert de gebruikersinterface. Je zult veel merken in de sectie. Het voegt alle css en pictogrammen toe, maar ook één regel in het bijzonder.

 

Dat is het laden van ons manifest.json-bestand, waardoor alle PWA-dingen gebeuren. Er wordt informatie gegeven die onze telefoon vertelt dat deze webpagina kan worden omgezet in een app.

Het javascript is waar de meeste interessante dingen gebeuren. Het is opgedeeld in bestanden, app.js bevat de basisprincipes om een ​​Vue-webpagina te laten werken met alle UI-gerelateerde variabelen en een paar andere dingen. ble.js heeft de bluetooth-dingen.

Javascript en Web Bluetooth

Ten eerste werkt dit alleen in Chrome en Opera. Ik zou willen dat andere browsers dit zouden ondersteunen, maar om wat voor reden dan ook, doen ze dat niet.

Kijk eens naar app.js en je ziet dezelfde UUID's die we in onze firmware hebben gebruikt. Een voor de uFire Service en een voor de tx- en rx-kenmerken.

Als je nu in ble.js kijkt, zie je de connect() en disconnect() functies.

De connect() functie bevat enige logica om de gebruikersinterface gesynchroniseerd te houden, maar het is vooral het instellen van dingen om informatie over de kenmerken te verzenden en ontvangen.

Er zijn enkele eigenaardigheden bij het omgaan met Web Bluetooth. De verbinding moet worden gestart door een soort fysieke gebruikersinteractie, zoals het tikken op een knop. U kunt bijvoorbeeld geen programmatische verbinding maken wanneer de webpagina is geladen.

De code om een ​​verbinding te starten ziet er als volgt uit:

this.device =wait navigator.bluetooth.requestDevice({
filters:[
{
namePrefix:"uFire"
}
],
optionalServices:[this.serviceUuid]
});

De sectie filters:en optionalServices is nodig om te voorkomen dat u elk afzonderlijk BLE-apparaat ziet. Je zou denken dat alleen het filtergedeelte goed zou zijn, maar je hebt ook het optionele gedeelte Services nodig.

De bovenstaande code toont een verbindingsdialoogvenster. Het maakt deel uit van de Chrome-interface en kan niet worden gewijzigd. De gebruiker kiest uit de lijst. Zelfs als er maar één apparaat is waarmee de app ooit verbinding zou maken, moet de gebruiker vanwege veiligheidsredenen nog steeds door dit selectiedialoogvenster gaan.

De rest van de code is het instellen van de service en kenmerken. Houd er rekening mee dat we een terugbelroutine hebben ingesteld, vergelijkbaar met de terugbelmelding van de firmware:

service =wachten op server.getPrimaryService(this.serviceUuid);
karakteristiek =wachten op service.getCharacteristic(this.txUuid);
wachten op karakteristieke.startNotifications();
kenmerk .addEventListener(
"characteristicvaluechanged",
this.value_update
);

this.value_update wordt nu aangeroepen elke keer dat er nieuwe informatie is over de tx-karakteristiek.

Een van de laatste dingen die het doet, is een timer instellen om de informatie elke 5 seconden bij te werken.

value_update() is slechts een lange functie die wacht tot nieuwe JSON-informatie binnenkomt en de gebruikersinterface ermee bijwerkt.

ec.js, ph.js en orp.js bevatten veel kleine functies die de opdrachten verzenden om informatie op te halen en de apparaten te kalibreren.

Om dit te proberen, moet u er rekening mee houden dat om Web Bluetooth te gebruiken, dit via HTTPS moet worden aangeboden. Een van de vele opties voor een lokale HTTPS-server is serve-https. Met de firmware geüpload, alles aangesloten en de webpagina die wordt weergegeven, zou je moeten kunnen zien dat alles werkt.

Het PWA-gedeelte

Er zijn een paar stappen om van de webpagina een echte app te maken. Progressive Web Apps kunnen veel meer dan waarvoor dit project ze gebruikt.

  • Webpagina-installatie
  • Na installatie is offline toegang mogelijk
  • Gestart en uitgevoerd als een normale app met een normaal uitziend app-pictogram

Om te beginnen, moeten we een aantal bestanden genereren. De eerste is een manifest.json-bestand. Er zijn een handvol sites die dit voor u doen, waarvan App Manifest Generator er een is.

Een paar dingen om te begrijpen:

  • Toepassingsbereik is belangrijk. Plaats deze webpagina op ufire.co/uFire-BLE/. Dat betekent dat mijn toepassingsgebied /uFire-BLE/ is.
  • Start-URL is ook belangrijk. Het is het pad naar uw specifieke webpagina met het basisdomein al aangenomen.
  • Weergavemodus bepaalt hoe de app eruitziet, standalone laat het lijken alsof het een gewone app is zonder Chrome-knoppen of interface.

Je krijgt een json-bestand. Het moet in de hoofdmap van de webpagina worden geplaatst, samen met index.html.

Het volgende dat je nodig hebt, is een servicemedewerker. Nogmaals, ze kunnen veel doen, maar dit project gebruikt de caching alleen om deze app offline toegankelijk te maken. De implementatie van de servicemedewerker is meestal boilerplate. Dit project gebruikte het Google-voorbeeld en wijzigde de lijst met bestanden die in de cache moesten worden opgeslagen. U kunt geen bestanden buiten uw domein cachen.

Ga naar FavIcon Generator en maak een paar pictogrammen.

Het laatste is om wat code toe te voegen in de Vue mounted() functie.

gemount:function () {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('service-worker.js');
}
},

Hierdoor wordt de werknemer bij de browser geregistreerd.

Je kunt controleren of alles werkt, en als dat niet het geval is, kun je erachter komen waarom door Lighthouse te gebruiken, het de site zal analyseren en je van alles zal vertellen.

Als alles werkte, vraagt ​​Chrome wanneer je naar de webpagina gaat of je deze wilt installeren met een pop-upbanner.

Code

Arduino-code maken
GitHub
https://github.com/u-fire/uFire-BLE

Schema's

Alle verbindingen worden gemaakt met Qwiic-draden.

Productieproces

  1. Web-enabled DDS, het IoT en de cloud
  2. Infineon benoemd tot Advanced Technology Partner van Amazon Web Services
  3. Basis IoT – RaspberryPI HDC2010 hoe
  4. Windows IoT:deur met gezichtsherkenning
  5. Bewegingsgestuurde AWS IoT-knop
  6. Windows 10 IoT Core en SHT15
  7. Windows 10 IoT Core voor Raspberry Pi 3 Model B+
  8. Raspberry Pi 4 als webserver [Maak eigen website]
  9. GoPiGo v2 met Windows IoT
  10. Azure IoT-zwembad
  11. Impact van IoT op de toekomst van ontwerp en ontwikkeling van webapps