Een digitale ingang en digitale besturing bouwen met behulp van Microchip's RN487x Bluetooth-module
Leer hoe u een Microchip-module gebruikt om een prototype te maken van digitale invoer en digitale randapparatuur.
In dit artikel, het tweede in een driedelige serie over Microchip's RN487x Bluetooth-modules, laat ik je zien hoe je een digitale ingang (een schakelaar) en een digitale besturing (van een LED) maakt.
Raadpleeg mijn eerste artikel voor achtergrondinformatie en instructies voor het configureren van de RN487x-module.
Project 1:RN478x digitale ingangsschakelaar
Ons ontwerppatroon heeft drie componenten die we moeten bieden:
- Hardware: Taakspecifieke hardware om het digitale signaal te genereren
- Configuratie: RN487x module commando's om een variabele in een database toe te wijzen, en om het signaal toe te wijzen aan de variabele
- Toepassing: Script op een werkstation om de databasewaarde te accepteren
Wat volgt is de uitsplitsing van de componenten.
Hardware voor digitale invoer
De rol van 'digitale invoer' wordt eenvoudigweg vervuld door een schakelaar; SW1.
De RN487x-module heeft interne pull-ups op de pinnen, dus een normaal open schakelaar die bij sluiting op aarde is aangesloten, geeft ons de nodige 2-standencontrole.
Omdat we maar één signaal beheren en we geen PWM gebruiken, hebben we gekozen voor de RN4871. Het circuit kan worden gevoed door een paar AAA-batterijen of zelfs een knoopcel.
De overige circuitelementen zijn;
- C1: Een bypass-condensator om de stroom te stabiliseren
- R1,C2: Een vertraging voor het resetten van de processor bij het inschakelen
- J1: Een seriële poort voor configuratie
Digitale invoerconfiguratie
Voordat u de configuratie voor dit voorbeeld maakt, moet u ervoor zorgen dat de module zich in een bekende staat bevindt. Dit wordt beschreven in de bijlage over gemeenschappelijke initialisatie. Sla deze stap niet over!
We hebben maar één kenmerk in de database nodig om onze sensorstatus weer te geven. Dus we creëren één service en één kenmerk in die service. De twee corresponderende commando's zijn:
PS,59c88760536411e7b114b2f933d5fe66 PC,59c889e0536411e7b114b2f933d5fe66,10,01
Het eerste commando, PS, maakt de service aan. Het tweede commando, PC, creëert het kenmerk. In beide opdrachten is de eerste parameter de identifier waarmee onze randapparatuur kan bestaan in het universum van andere Bluetooth-randapparatuur en toch op unieke wijze toegankelijk is. Deze parameter moet voldoen aan de UUID-standaard. U kunt de getoonde voorbeeldwaarden gebruiken. Het is ook eenvoudig om een willekeurig aantal standaard UUID's aan te maken.
In het pc-commando vertelt de tweede parameter de Bluetooth-laag hoe veranderingen in de waarde de client moeten bereiken. In dit geval zegt de parameter (10) dat veranderingen in de waarde kunnen resulteren in een onmiddellijke melding aan klanten. Dit is een belangrijk onderdeel van onze bedoeling voor dit voorbeeld. Ten slotte definieert de derde parameter in het pc-commando de grootte van de waarde in bytes; slechts één in dit geval (01).
Het scriptgedeelte van onze configuratie ziet er als volgt uit:
@PW_ON SW,0A,09 @PIO1H SHW,0072,01 @PIO1L SHW,0072,00
Er zijn drie methoden in dit script, elk voorafgegaan door '@'. Elke methode wordt uitgevoerd op een specifieke systeemgebeurtenis.
- PW_ON: Werkt bij inschakelen. De methode configureert onze interessante pin (P1_2) als een 'getriggerd' digitaal ingangssignaal.
- PIO1H: Wordt uitgevoerd wanneer het triggersignaal naar hoog overgaat. De methode schrijft een '1' naar de database.
- PIO1L: Wordt uitgevoerd wanneer het triggersignaal naar laag overgaat. De methode schrijft een '0' naar de database.
Toepassing voor digitale invoer
Het Python-script is switch.py en is hier te vinden. Bewerk het script en vervang het voorbeeld-MAC-adres door het MAC-adres van uw apparaat. Om het voorbeeld uit te voeren, zet u gewoon de randapparatuur aan en voert u het script uit op een systeem met de juiste Bluetooth-mogelijkheden. Zie de bijlage voor hulp bij deze setup in Linux. Het script geeft berichten af om de voortgang aan te geven tijdens het verbinden met de randapparatuur. Nadat het randapparaat is aangesloten, drukt u een paar keer op de schakelaar en laat deze weer los. Elke open/dicht-gebeurtenis van de switch wordt genoteerd met een bericht van het lopende script.
Het script is kort en bevat opmerkingen voor alle functieblokken en GATT API-aanroepen.
De BLE-functie die we gebruiken en die uniek is voor dit voorbeeld, is melding.
- We gebruiken een terugbelmethode om een signaalwijziging van het randapparaat af te handelen wanneer dit gebeurt. We hoeven de randapparatuur niet te pollen om de status van het signaal te leren.
- We moeten de randapparatuur laten weten dat we deze meldingen willen door naar een systeemkenmerk te schrijven.
Project 2:RN487x digitale besturing
Ons ontwerppatroon heeft drie componenten die we moeten bieden:
- Hardware: Taakspecifieke hardware om een digitale output uit te drukken
- Configuratie: RN487x module commando's om een variabele in een database toe te wijzen, en om de variabele toe te wijzen aan het signaal
- Toepassing: Script op een werkstation om de databasewaarde te schrijven
Wat volgt is de uitsplitsing van de componenten.
Hardware voor digitale controle
De rol van ‘digitale output’ wordt simpelweg geleverd door een LED; D1.
De referentiecircuits van de RN487x-module suggereren GPIO met open collector, dus we verlichten de LED dienovereenkomstig door stroom te laten dalen.
Omdat we maar één signaal beheren en we geen PWM gebruiken, hebben we gekozen voor de RN4871. Het circuit kan worden gevoed door een paar AAA-batterijen of zelfs een knoopcel.
De overige circuitelementen zijn;
- C1: Een bypass-condensator om de stroom te stabiliseren
- R1,C2: Een vertraging voor het resetten van de processor bij het inschakelen
- J1: Een seriële poort voor configuratie
Digitale besturingsconfiguratie
Voordat u de configuratie voor dit voorbeeld maakt, moet u ervoor zorgen dat de module zich in een bekende staat bevindt. Dit wordt beschreven in de bijlage over gemeenschappelijke initialisatie.
Sla deze stap niet over!
We hebben maar één kenmerk in de database nodig om onze sensorstatus weer te geven. Dus we creëren één service en één kenmerk in die service.
De twee corresponderende commando's zijn:
PS,59c88760536411e7b114b2f933d5fe66 PC,59c889e0536411e7b114b2f933d5fe66,08,01
Het eerste commando, PS, maakt de service aan. Het tweede commando, PC, creëert het kenmerk. In beide opdrachten is de eerste parameter de identifier waarmee onze randapparatuur kan bestaan in het universum van andere Bluetooth-randapparatuur en toch op unieke wijze toegankelijk is. Deze parameter moet voldoen aan de UUID-standaard. U kunt de getoonde voorbeeldwaarden gebruiken. Het is ook gemakkelijk om een willekeurig aantal standaard UUID's aan te maken.
In het pc-commando vertelt de tweede parameter de Bluetooth-laag hoe veranderingen in de waarde de randapparatuur moeten bereiken. In dit geval zegt de parameter (08) dat de randapparatuur een bevestiging naar de client moet sturen wanneer een waarde wordt gewijzigd. Ten slotte definieert de derde parameter in het pc-commando de grootte van de waarde in bytes; slechts één in dit geval (01).
Het scriptgedeelte van onze configuratie ziet er als volgt uit:
@CONN |O,08,72
Er is maar één methode in dit script '@CONN'. Het wordt uitgevoerd telkens wanneer een client verbinding maakt met het randapparaat.
De enkele scriptregel is een 'handle association'-opdracht, met een zeer krachtig resultaat. Het associeert de databasevariabele met een digitale pin-uitvoeropdracht. De parameter '08' is een bitmasker dat de pin aangeeft waarmee onze LED is verbonden. De parameter '72' is een uniek en permanent handvat voor het kenmerk dat we in de database hebben gemaakt. Dus nadat een client verbinding heeft gemaakt, gaat onze LED dienovereenkomstig aan of uit elke keer dat de client een nieuwe waarde naar de databasevariabele schrijft.
Applicatie voor digitale controle
Het Python-script is light.py en is hier te vinden. Bewerk het script en vervang het voorbeeld-MAC-adres door het MAC-adres van uw apparaat. Om het voorbeeld uit te voeren, zet u gewoon de randapparatuur aan en voert u het script uit op een systeem met de juiste Bluetooth-mogelijkheden. Zie de bijlage voor hulp bij deze setup in Linux. Het script geeft berichten af om de voortgang aan te geven tijdens het verbinden met de randapparatuur. Nadat het randapparaat is aangesloten, stuurt het script elke seconde een nieuwe opdracht naar het randapparaat. De commando's zetten de LED aan en uit.
Het script is kort en bevat opmerkingen voor alle functieblokken en GATT API-aanroepen. De BLE-functie die we gebruiken en die uniek is voor dit voorbeeld, is handvatassociatie.
Je kunt dit hele voorbeeld in actie zien in de begeleidende projectvideo.
Volgende stappen
Hiermee is deel 2 van onze driedelige serie over de RN487x-module afgesloten.
Deel 3 volgt hetzelfde ontwerppatroon om een analoge sensor en een analoge besturing te creëren. Het bevat ook enkele onderwerpen voor verder onderzoek die van toepassing zijn op alle voorbeeldprojecten.
Internet of Things-technologie
- Vrij als in vrijheid of gratis bier? ... wat dacht je van:gratis te gebruiken, te bouwen en te onderzoeken!
- C# Basisinvoer en -uitvoer
- Recap:hoe Bluetooth LE en XLE de toekomst zijn van het volgen en monitoren van bedrijfsmiddelen
- Hoe Bluetooth + Ultrasound =Betere RTLS-nauwkeurigheid en lagere kosten
- Een preventief onderhoudsschema opstellen en optimaliseren
- Sensoren en bedieningselementen met de RN487x Bluetooth-module van Microchip
- Hoe u oplossingen bouwt die uw klanten willen (en willen betalen)
- Hoe houd je waterkracht onder controle:Beheer en onderhoud van waterkrachtcentrales
- Hoe bouw je een slimmere operatie met behulp van tankmonitoring IoT-technologie
- Big data begrijpen:RTU's en procescontroletoepassingen
- Wat is Lean Digital en hoe integreer je het?