Plugin 033

Uit Nodo Wiki
Ga naar: navigatie, zoeken

plugin gegevens

plugin naam NRF
plugin nummer 033
Productnummer Product nummer:SWACDE-33-V10
Versie 0.1
Compatibiliteit Nodo versie 3.7 en hoger
Auteur Martinus van den Broek
Support http://www.nodo-domotica.nl/forum/
Download Plugin_033.c

Beta Plugin !

Let op: Deze plugin heeft de status "Beta". Houdt rekening met het volgende:

1) De functie SendTo kan niet worden gebruikt in plugins! Programmeer een Nodo Small unit via I2C!

2) In de toekomst wordt de plugin mogelijk zodanig gewijzigd dat hij niet meer backwards compatible is met de oude versie

Toepassing

Deze plugin is primair ontwikkeld voor een "Nodo Sensor netwerk". Hierbij koppel je diverse simpele Nodo 'slaves' aan je centrale Nodo Mega via de NRF24L01 module. De Nodo is n.l. in staat om via de NRF24L01 Nodo berichten via de 2.4 GHz band te verzenden en ontvangen. Deze mogelijkheid is dus goed toe te passen als je een uitgebreid sensor netwerk wilt aanleggen op basis van goedkope (via eBay!) Arduino Mini Pro of Arduino Nano bordjes. Je sensor netwerk werkt dan op een andere frequentie dan 433 en dus heb je geen last van verstoring van b.v. je Kaku ontvangers.

We gebruiken de NRF module NIET in combinatie met een Nodo Small of Nodo Mini. In dat geval gaat alles dubbel via RF en heeft het gebruik van de 2.4 GHz geen voordelen meer. Het is de bedoeling dat alleen de centrale Mega beschikt over zowel 433M als 2.4G transceivers. De centrale Mega ontvangt dus berichten van beide frequenties en zendt ook uit op beide frequenties. De Nodo Sensor zoals we hier beschrijven zal alleen uitzenden op de 2.4G band.

Funktionele beschrijving

De NRF24L01 is een 2.4 GHz transceiver die zelfstandig complete datapakketten kan verzenden. De module kan worden gebruikt om variabelen en userevents uit te wisselen tussen Nodo units. Op de centrale Mega wordt een NRF aangesloten zodat de Mega de RF berichten zowel op 433MHz als 2.4GHz uitzendt. We gebruiken dit voor het verzenden van user events naar alle Nodo's.

Op de Nodo slave (sensor) sluiten we alleen een NRF module aan. Gebruik hiervoor dus geen Nodo Small (NSM) of Nodo Mini maar een Arduino Uno,Nano of Mini Pro. Deze unit laat je luisteren naar bepaalde userevents en dan de inhoud van de variabelen verzenden naar de centrale Nodo. (zie voorbeeld scripts hieronder)

Op deze wijze bouw je een uitgebreid network van goedkope en compacte sensoren voor b.v. meten van temperatuur, luchtvochtigheid. Je hebt naast een Arduino enkel nog een DS18B20 of DHT11 of DHT22 nodig. Natuurlijk zijn er nog veel meer mogelijkheden te bedenken, b.v. een gateway tussen je 868MHz weerstation en de Nodo. In dat geval hou je ook de 433MHz band vrij van onnodig verkeer.

NRF en de Wifi band

De NRF24L01 module werkt op dezelfde frequentieband als de 2.4G Wifi apparaten, maar het is zelf geen Wifi transceiver (!). Je kan echter wel storing ondervinden van Wifi apparaten. De module kunnen we instellen op kanaal 1 t/m 62. Standaard staat de Mega op kanaal 36 en de sensoren zoeken zelf het gebruikte kanaal op. Bij slechte ontvangst kan het nodig zijn om dit kanaal te wijzigen.

Installatie

  1. download de plugin code en plaats deze als bestand 'plugin_033.c' in de directory ../plugins
  2. open het configuratiebestand 'config_nn.c' uit de directory ../Config, waarbij nn het Nodo unit nummer is.
  3. voeg de volgende regels toe:
#define PLUGIN_033
#define PLUGIN_033_CORE

Compileer en upload de code naar je Nodo.

Hardware

De NRF24L01 is goed te verkrijgen via b.v. ebay. De module dient met 4 io pinnen te worden aangesloten op de Nodo. LET OP: De module moet worden aangesloten op een voedingsspanning van 3.3 volt. Aansluiten op 5 volt leidt tot een defecte unit!!! De data pinnen zijn wel 5 volt tolerant en kunnen dus zonder problemen direct worden verbonden met de Nodo.

Er zijn verschillende modules te verkrijgen. De goedkoopste modules hebben een simpele PCB antenne. Het bereik van deze module is dan ook beperkt. Er zijn ook modules met een SMA connector waarop je een externe antenne moet aansluiten. Let op dat deze antenne's een male aansluiting hebben. Een Wifi antenne heeft een female aansluiting en is dus niet geschikt want de binnenste pin maakt dan geen contact!. Als je een SMA versie aanschaft, kies dan bij voorkeur voor een levering inclusief antenne.


NRF24L01.png NRF24L01 PA NLA.jpg



Aansluitingen

Default aansluitingen:

 NRF24L01 	Nodo
 1-GND 		GND
 2-VCC  	3.3 Volt
 3-CE		3.3 Volt
 4-CSN		A0 (Small) of A12 (Mega)
 5-SCK		A3 (Small) of A15 (Mega)
 6-MOSI		A1 (Small) of A13 (Mega)
 7-MISO		A2 (Small) of A14 (Mega)
 8-IRQ		Not connected

NRF24L01 pinout.png

Voeding

De modules moeten worden gevoed met 3.3 volt. Bij 5 volt raken ze defect. De module met PCB antenne gebruikt ongeveer 15 mA en kan worden aangesloten op de 3.3 volt aansluiting van b.v. een Arduino Mega, Uno of Nano. De module met externe antenne heeft ook een PA (Power Amplifier) en gebruikt daarom ongeveer 115 mA. Deze kan NIET worden geleverd door een Arduino bordje. Gebruik dan een losse Ultra Low Drop Output (LDO) spanningsregelaar die minimaal 150 mA kan leveren.

De voedingsspanning dient storingsvrij te zijn (!) anders kan de ontvangst van de module erg slecht zijn. Gebruik indien nodig condensatoren om de voedingspanning storingsvrij te maken. In de praktijk blijkt de 3V3 aansluiting van een Arduino bordje niet ruisvrij te zijn. Gebruik bij voorbeeld een combinatie van 10uF en 100nF. Beide sluit je parallel aan tussen GND en VCC, zo dicht mogelijk bij de module.

Je kunt ook dit soort kant en klare adapters gebruiken: NRF24L01AdapterPlate.png


Of alleen deze zeer compacte spanningsregelaar: MS1117.png

Voorbeeld Nodo sensor

Ter illustratie hoe compact en goedkoop je Nodo Sensor basis kan zijn, hierbij een voorbeeld van een mogelijke opbouw:

Nodo Mini 2.4G back.jpg

Onderdelen:

Arduino Mini Pro
NRF24L01
10 uF condensator
TS2950C-3,3 LDO Spanningsregelaar
Tezamen voor ongeveer 3 euro aan onderdelen

Alleen nog een Dallas DS18B20, LDR of DHT toevoegen en je eerste sensor is gereed voor actie!

Syntax

De plugin heeft geen configuratie nodig als je de standaard aansluitingen gebruikt. Er zijn wel enkele commando's mogelijk. Het commando kan worden gebruikt in scripts, vanaf de command-line of vanuit de eventlist.

Er zijn een aantal verschillende commando's:

NRF RF,<kanaal> 
Parameter: Beschrijving: Bereik: Opmerking:
Kanaal Kanaal waarop de module zendt/onvangt 1-62 Werkt alleen op een Nodo Mega
NRF STATUS,<Nodo Unit> 
Parameter: Beschrijving: Bereik: Opmerking:
Nodo Unit Unit nummer van de andere Nodo die je wilt 'pingen' 1-31 Werkt alleen op een Nodo Mega
NRF ?,? 
Parameter: Beschrijving: Bereik: Opmerking:
Par1  ?  ?
Par2  ?  ?

Voorbeeld Commando

nrf status,16
Input=Serial; Unit=4; Event=NRF Status,16
status 46
roundtrip 3
retries 0

Voorbeeld Eventlist

Hier een uitgewerkt voorbeeld van een opstelling met een centrale Nodo en 4 sensoren:

LET OP: Een plugin geeft geen mogelijkheid voor Sendto, dus de sensor Nodo's moet je voorzien van een eventlist via een tijdelijke I2C verbinding met de centrale Mega!


Centrale Nodo

EventlistWrite; Boot 1; TimerSet 1,300
EventlistWrite; Timer 1; TimerSet 1,20
EventlistWrite; Timer 1; VariableInc 14,1
EventlistWrite; Variable 14,1; UserEventSend 250,2
EventlistWrite; Variable 14,2; UserEventSend 250,3
EventlistWrite; Variable 14,3; UserEventSend 250,4
EventlistWrite; Variable 14,4; UserEventSend 250,5
EventlistWrite; Variable 14,5; TimerSet 1,300
EventlistWrite; Variable 14,5; VariableSet 14,0
EventListWrite; WildCard All,Variable,0; EventSend HTTP;

Sensor Nodo (meterkast energiemeting)

eventlistwrite; userevent 250,2; pulse 1,1;
eventlistwrite; userevent 250,2; pulse 2,3;
eventlistwrite; userevent 250,2; pulse 3,5;
eventlistwrite; userevent 250,2; delay 1;
eventlistwrite; userevent 250,2; VariableSend 1,RF;
eventlistwrite; userevent 250,2; delay 1;
eventlistwrite; userevent 250,2; VariableSend 2,RF;
eventlistwrite; userevent 250,2; delay 1;
eventlistwrite; userevent 250,2; VariableSend 3,RF;
eventlistwrite; userevent 250,2; delay 1;
eventlistwrite; userevent 250,2; VariableSend 4,RF;
eventlistwrite; userevent 250,2; delay 1;
eventlistwrite; userevent 250,2; VariableSend 5,RF;
eventlistwrite; userevent 250,2; delay 1;
eventlistwrite; userevent 250,2; VariableSend 6,RF;
eventlistwrite; userevent 250,2; delay 1;

Sensor Nodo (weerstation gateway met DHT11, LDR en BMP085)

eventlistwrite; boot 3; alectoV2 94,2;
eventlistwrite; Time 00:00,All; VariableSet 4,0;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 2,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 3,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 4,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 5,RF;
eventlistwrite; UserEvent 250,6; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 6,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 7,RF;
eventlistwrite; UserEvent 250,3; BMP085Read 8;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 9,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; dhtread 3,10;
eventlistwrite; UserEvent 250,3; VariableWiredAnalog 12,1;
eventlistwrite; UserEvent 250,3; VariableSend 11,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;
eventlistwrite; UserEvent 250,3; VariableSend 12,RF;
eventlistwrite; UserEvent 250,3; delay 1,On;

Sensor Nodo (Temperatuur)

eventlistwrite; UserEvent 250,4; delay 1,On;
eventlistwrite; UserEvent 250,4; TempRead 1,1;
eventlistwrite; UserEvent 250,4; VariableSend 1,RF;

Sensor Nodo (Temperatuur en luchtvochtigheid)

eventlistwrite; UserEvent 250,5; delay 1,On;
eventlistwrite; UserEvent 250,5; DHTRead 1,1;
eventlistwrite; UserEvent 250,5; VariableSend 1,RF;

Opmerkingen

Zie ook