Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial Internet of Things >> Internet of Things-technologie

Sensoren en bedieningselementen met de RN487x Bluetooth-module van Microchip

Meer informatie over de RN487x-familie van Bluetooth-modules en hoe u ze configureert voor uw energiezuinige randapparatuurprojecten.

Als u een kleine, energiezuinige randapparatuur ontwikkelt, is de kans groot dat u Bluetooth als uw communicatielaag beschouwt.

Naarmate de standaard is geëvolueerd, hebben Bluetooth-verbonden apparaten zich snel verspreid. Er zijn hardwaremodules geïntroduceerd die een complete SoC (system on chip) bieden voor vrijwel elk randontwerp. De Nordic nrf52840 is een goed voorbeeld. De systeemkern is een 32-bits processor en Bluetooth-radio met meerdere protocollen. Deze kern is omgeven door elke interface die je nodig zou kunnen hebben; GPIO, PWM, USB, SPI, I 2 S, en nog veel meer.

Het nadeel van deze krachtige SoC en andere is de complexiteit. Er is een aanzienlijke leercurve en ontwikkeltijd nodig om de benodigde embedded software voor deze SoC's te maken en te integreren.

Voor enkele van de meest voorkomende soorten randapparatuur zijn er echter eenvoudigere alternatieven. Als uw randapparaat voornamelijk een afstandssensor of een afstandsbediening is, met een beperkt aantal kanalen (analoog en digitaal), kunt u waarschijnlijk uw doelen bereiken met de RN487x-module van Microchip.

Deze familie van twee Bluetooth-modules biedt meerdere, gelijktijdige, bidirectionele digitale en analoge kanalen. De module is afgestemd op specifieke ontwerpen door een klein beetje configuratie op te slaan in de module NVRAM. Ondanks de eenvoud voldoet de module nog steeds aan de BLE-standaard (Bluetooth low-energy) en is dus compatibel met de nieuwste Bluetooth-clients, zoals moderne smartphones.

In deze serie demonstreren we het gebruik van de RN487x-module. We zullen een functioneel Bluetooth-aangesloten randapparaat maken voor elk van de vier taken; een digitale sensor, een digitale besturing, een analoge sensor en een analoge besturing. Elk voorbeeld bevat een nominaal circuit en de benodigde configuratie op de RN487x. Er is ook een eenvoudig applicatiescript voor het oefenen van de randapparatuur. De interfacepunten in het applicatiescript zijn goed gedocumenteerd; het maximaliseren van het potentieel om deze randapparatuur als subsystemen in grotere ontwerpen op te nemen.

Ontwerpoverzicht

Laten we eens kijken naar een grafische uitsplitsing voor het voorbeeld van de 'analoge sensor', met de belangrijkste interfaces in het rood.

Een weergave van een Linux-systeem dat communiceert met een randapparaat

Er zijn drie systeemelementen die we zullen maken. Voor de randapparatuur moeten we hardware maken die ons sensorsignaal levert; de transducer in dit voorbeeld. Het genereert een variërende analoge spanning. Voor de gebruiker zullen we een applicatie maken om de gegevens te presenteren; het Python-script in dit voorbeeld.

Het script moet de GATT-API gebruiken om informatie van en naar de randapparatuur over te dragen. We zullen ook een configuratie moeten maken in de RN487x-module. Deze configuratie regelt de gegevensstroom tussen de applicatie en de hardware.

Componentselectie

Er zijn twee modules in de RN487x-familie; de RN4870 en de RN4871. Ze verschillen in het aantal en type pinnen voor I/O. U kunt deze beperkingen vinden in de datasheet en de gebruikershandleiding, maar deze is enigszins verspreid. Hieronder vindt u een reorganisatie van het pinbudget voor de twee chips. Deze opstelling zou het gemakkelijker moeten maken om te zien welke chip je nodig hebt voor je randapparaat.

Er zijn drie I/O-pintypes beschikbaar op de c-modules:

Type Beschrijving
ADC Analoge ingang:een ingangssignaalniveau wordt geconverteerd naar een numeriek bereik.
PWM Analoge uitvoer:een paar getallen wordt geconverteerd naar een blokgolf. De cijfers bepalen de frequentie en duty-cycle van de blokgolf.
DIO Digitale invoer of uitvoer:voor digitale invoer staat het hoge of lage signaalniveau voor respectievelijk 1 of 0. Omgekeerd voor digitale uitvoer.

En hier zijn de pinbudgetten voor de twee modules:

RN4870

Afbeelding uit de RN487x-datasheet

Pinnaam/mogelijkheid P1_0 P1_1 P1_2 P1_3 P2_2 P2_3 P2_4 P2_5
ADC x x x x
PWM x x
DIO x x x x x

RN4871

Afbeelding uit de RN487x-datasheet

Pinnaam/mogelijkheid P1_2 P1_3
ADC x
PWM
DIO x x

Deze tabellen moeten duidelijk maken dat als u geen PWM nodig heeft en u slechts één of twee signalen hoeft te beheren, u de 4871 gebruikt. Dit bespaart resources. Als je PWM nodig hebt, of als je meer dan twee signalen wilt beheren, dan heb je de 4870 nodig. Voor onze analoge sensor hebben we maar één analoge ingang, dus de 4871 zou voldoende zijn. We zouden het signaal verbinden met de P1_2 pin van de module.

GATT (algemeen kenmerk) profiellaag van de BLE-protocolstack

We zijn bijna klaar om enkele echte voorbeelden te implementeren. Maar om de gebruikerstoepassing te schrijven, hebben we een nauwkeuriger begrip nodig van de api die we zullen gebruiken wanneer we met de randapparatuur praten.

Alle Bluetooth Low Energy-apparaten gebruiken het Generic Attribute (GATT)-profiel voor de uitwisseling van gestructureerde gegevens. In dit model is het randapparaat georganiseerd als een server die een eenvoudige database bevat. De database bevat op zijn beurt een aantal variabelen die de bruikbare gegevens vertegenwoordigen. Toepassingen zoals ons Python-script zijn georganiseerd als clients die de GATT-API gebruiken om op namen gebaseerde query's in de database te maken. De API kan worden gebruikt om waarden uit de database te lezen en om waarden in de database te schrijven.

Als voorbeeld zijn hier twee nuttige GATT API-methodeaanroepen in Python:

gatt_rq.connect() gatt_rq.write_by_handle(vh_light, str(bytearray([8]))

De eerste wordt gebruikt om een ​​verbinding met het randapparaat tot stand te brengen. De tweede schrijft enkele waarden naar de database; deze waarden worden onmiddellijk uitgedrukt als digitale uitgangen op het randapparaat. Het eerste argument voor de 'schrijf'-methode is een handvat dat specifiek is voor de digitale uitgang of uitgangen die we willen bedienen. Er zijn nog maar een paar regels nodig voor een functioneel compleet voorbeeld.

Deze API wordt weergegeven als onderdeel van Bluetooth-services in iOS, Android, Windows en Linux. De voorbeelden in dit artikel zijn geschreven in Python en zullen in veel gangbare Linux-distributies worden uitgevoerd.

Moduleconfiguratie

De parameter 'vh_handle' in de bovenstaande scriptmethode leidt ons naar het laatste element in dit ontwerppatroon. De parameter is een referentie in de software voor een specifiek fysiek signaal op het randapparaat. Maar hoe wordt dit datapad ingevuld? Er zijn twee configuraties in het NVRAM van de RN487x die dit zullen doen; karakteristieke definitie en pinbinding.

  • Kenmerkende definitie: Opdrachten die ruimte toewijzen aan waarden in de database en die elke waarde een unieke id geven die door clienttoepassingen kan worden geraadpleegd.
  • Pinbinding: Scripts die fysieke signalen omzetten in databasewaarden en vice versa.

De RN487x-configuratie wordt in de module geladen met een aangepaste opdrachttaal. Zie de bijlage voor een algemene handleiding over het maken van een consoleverbinding met de module en het geven van configuratieopdrachten.

Nadat we deze opdrachten hebben gegeven, ziet de niet-vluchtige configuratie in de RN487x er ongeveer zo uit:

Merk op dat alle gegevenswaarden bestaan ​​binnen een hiërarchie van twee niveaus van 'services' en 'kenmerken'. Deze organisatie is meer dan we nodig hebben, maar wordt nuttig voor complexe systemen waar meerdere sensoren en bedieningselementen zouden bestaan ​​binnen logisch gescheiden services.

Hiermee is deel één van onze driedelige serie over de RN487x-module afgesloten. Delen 2 en 3 gebruiken hetzelfde ontwerppatroon om een ​​digitale ingang, een digitale besturing, een analoge sensor en een analoge besturing te creëren.

Deel 4 bevat ook enkele onderwerpen voor verder onderzoek die van toepassing zijn op alle voorbeelden.

Hieronder vindt u een bijlage met informatie voor het configureren en gebruiken van uw modules vóór elk van de projectbeschrijvingen die in andere artikelen zullen volgen.

Een consoleverbinding gebruiken om de RN487x te configureren

Om de RN487x te configureren, moet u eerst de module van stroom voorzien en een seriële verbinding tot stand brengen tussen de module en een werkstation. Elk van onze demonstratiecircuits heeft een 3-pins 'prog'-jumper die de benodigde RX-, TX- en GND-signalen blootlegt. Als u niet zeker weet hoe u deze verbinding met uw werkstation moet maken, vindt u hier een uitstekende handleiding.

Start een terminalemulator op uw werkstation. Een emulator die bijzonder geschikt en algemeen verkrijgbaar is, is het hulpprogramma 'miniterm' dat in de meeste Python-omgevingen is opgenomen. In de shell van een werkstation kan het als volgt worden gestart:

python -m serial.tools.miniterm --eol LF /dev/ttyUSB0 115200

Dit voorbeeld toont een poortnaam (/dev/ttyUSB0) die geschikt is voor een Linux-systeem. De vorm van de poortnaam zal voor andere besturingssystemen anders zijn. De standaard baudrate voor de module is 115200 en er is weinig reden om deze te wijzigen.

De RN487x-module staat standaard in de DATA-modus. We hebben de COMMAND-modus nodig. Deze modus wordt geactiveerd door drie dollartekens (‘$$$’) in de terminalemulatortoepassing te typen. U ziet de tekens niet in het terminalvenster, maar het resultaat zou een opdrachtprompt moeten zijn die wordt geretourneerd door de RN4871:

CMD>

Druk op de 'd'-toets gevolgd door de 'enter'-toets. Je zou zoiets als dit moeten zien:

CMD> BTA=D88039F80080 Naam=RN_BLE Verbonden=nee Authen =2 Functies=0000 Diensten=00 CMD>

Dit is een minimale beschrijving van de modulestatus. Merk op dat de opdrachtinterpreter het door u getypte teken ('d') niet weergaf. U moet 'echo' inschakelen om dit op te lossen. Doe dit door op de '+' toets te drukken gevolgd door de 'enter' toets. Het apparaat zou als volgt moeten reageren:

CMD> ECHO AAN CMD>

U bent nu op een punt waar u verschillende configuratietaken kunt uitvoeren die in de rest van dit project worden beschreven. Het maken van een service wordt bijvoorbeeld bereikt door simpelweg een volledige 'PS'-opdracht in één regel te typen, gevolgd door de 'enter'-toets. Bijv.:

CMD> PS,59c88760536411e7b114b2f933d5fe66 AOK

Elk van de projectconfiguraties vereist ook dat een script met meerdere regels wordt vastgelegd in de module NVRAM. Dit type commando met meerdere regels vereist wat meer uitleg. U begint scriptinvoer met een 'WW'-commando, gevolgd door 'enter'. Typ vervolgens elke scriptregel. Elke scriptregel, inclusief de laatste regel, wordt ook afgesloten met de 'enter'-toets.

Ten slotte leg je het script vast door op de 'esc'-toets te drukken. Bijv.:

CMD> ww @CONN |O,08,72 AOK CMD>

Algemene initialisatie van de module

Als je een RN487x-module hebt gebruikt voor een van de voorbeelden in dit project, of als je de module voor een heel ander doel hebt gebruikt, en je staat op het punt de module voor een ander voorbeeld te configureren, is het mogelijk dat de module een bepaalde configuratie heeft dat in strijd is met het volgende beoogde gebruik.

​De volgende stappen moeten vóór elk voorbeeld in dit project worden genomen:​

  • Wis een bestaand script.
  • Schakel scriptverwerking in.
  • Wis een bestaande service/kenmerkdefinitie.
  • Verwijder eventuele speciale functies van de pin die we gebruiken (P1_2, index 0A).
  • Herstart de module.

Gebruik de vorige bijlagesectie om de moduleopdrachtshell te bereiken. Gebruik vervolgens de volgende opdrachtreeks om de noodzakelijke initialisatie uit te voeren:

CMD> WC AOK CMD> SR,0040 AOK CMD> PZ AOK CMD> SW,0A,00 AOK CMD> R,1 Opnieuw opstarten

Linux-configuratie vereist voor het uitvoeren van voorbeeldpython-scripts

Hardware

Het systeem waarop deze scripts worden uitgevoerd, heeft natuurlijk hardware nodig die Bluetooth Low Energy (BLE) ondersteunt. BLE is geïntroduceerd in versie 4, dus als uw Bluetooth-hardware een versie hieronder specificeert, zal het waarschijnlijk niet werken voor deze voorbeelden.

Als u een USB-adapter voor een werkstation wilt kopen om deze voorbeelden te proberen, raad ik een adapter aan die gebruikmaakt van de ​Qualcomm CSR8510​. Eén exemplaar is hier te koop.

Software

Deze setup is geverifieerd voor Debian 10. Het zou van toepassing moeten zijn op op Debian gebaseerde distributies zoals Ubuntu. Deze voorbeelden hebben rechtstreeks toegang tot twee componenten die niet standaard zijn geïnstalleerd in Debian 10;

  • De Python-module voor toegang tot de Bluetooth-stack. Dit onderdeel is beschikbaar via het pakketbeheersysteem en heet 'python-bluez'.
  • De Python-module speciaal voor Bluetooth GATT-oproepen; ‘gattlib’. Dit onderdeel is beschikbaar via de officiële pakketindex van Python (via het 'pip'-hulpprogramma).

De 'pip'-installatie van 'gattlib' bouwt een ELF-bibliotheek. Dit proces vereist ook enkele tools en bibliotheken.

Dit alles bij elkaar opgeteld, moet een lijst met pakketten worden opgevraagd bij de systeempakketbeheerder, gevolgd door een enkel moduleverzoek om te 'pip'. Een script om deze acties te voltooien is hier beschikbaar. Als u ervoor kiest om het script uit te voeren, moet u het na het downloaden 'uitvoeren'-machtigingen geven.

Referenties

  • RN487x-gegevensblad
  • RN487x Gebruikershandleiding
  • GATT-API in Windows
  • GATT-API in iOS
  • GATT-API in Python

Kom terug voor de volgende delen van deze projectreeks, waar we de volledige voorbeelden zullen maken.

Ga naar projecten 1 en 2:bouwen van een digitale ingang en digitale besturing.


Internet of Things-technologie

  1. De synergie van cellulair IoT en Bluetooth LE
  2. Ontwerpen met Bluetooth Mesh:chip of module?
  3. Contrinex:cloud-ready slimme sensoren en veiligheidslichtgordijnen met Bluetooth-interface
  4. ADLINK:implementeer AI van edge tot cloud met Edge AI Solutions en het NVIDIA EGX-platform
  5. Analoge sensoren zonder analoge ingangen op de Raspberry Pi
  6. Analoge sensoren lezen met Raspberry Pi en Zabbix Supervisor
  7. Wat moet ik doen met de gegevens?!
  8. IoT-gegevens benutten van de edge naar de cloud en terug
  9. Digitalisering en de voedings- en drankenindustrie
  10. The Edge en IoT:inzichten uit IoT World 2019
  11. Digitale productie en het IIoT – succes met één enkel platform