apr 052017
 

One of the challenges left with regards to the LoPy was to find a way to actually connect sensors to the node. I had little luck with the DHT11 temperature/moisture sensor (one of the drawbacks of MicroPython over regular Arduino code is the lack of libraries) and didn’t have any I2C sensors lying around. But I did of course still had the Circuit Playground by Adafruit and I knew how to talk to that one from another device using the hardware serial RX/TX connection because I had already connected it to a micro:bit that way (the posts are here, but in Dutch).

So surely it should be possible to connect it to a LoPy and send the sensor data to The Things Network (TTN) that way? Is was. Not as easy and simple as I had hoped, but in the end it worked. Since it is rather a complex structure, I made a small graphic to explain how all the parts go together.

Let’s start with the easy parts: I have got a LoPy Nano Gateway up and running. That is not a full compliant LoRaWAN gateway, but it takes care of receiving messages send via LoRa / 868 Mhz and relaying them, via WiFi, via my WiFi Router, the internet, to the The Things Network (TTN) backend. That is the regular part.

On the right end lower corner, the action starts with the LoPy Node. It is connected via two cables to the Circuit Playground (CPG). One cable goes from the TX port of the LoPy Node to the RX port of the CPG. The other one goes from the TX port of the CPG to the RX port of the LoPy Node. The LoPy Node sends a signal (a digit ranging from 1 to 10) over the serial connection to the CPG. After the CPG receives the signal, it reads the three build in sensors for light, noise and temperature. It then converts the values to a 12 byte HEX string value and sends that back over the serial connection toe the LoPy Node. After sending the signal, the LoPy node waits a bit, giving the CPG time to return the value, then it reads the values and sends that via LoRa to the first available gateway, in this case the LoPy Nano Gateway on my desk.

After the gateway has delivered the messages to TTN, a Payload function translates the received value back into three individual values. It then send them, via the Integrations option, to the Swagger server where it the is available in JSON format. See, easy peasy. 🙂

I uploaded all the code to Github. You can find it here. The code in the LoPy-flash folder is (of course) intended for the LoPy Node, the code in the Circuit Playground folder needs to be uploaded to the CPG via the regular Arduino IDE. I made some changes to the LoPy node code provided by Pycom: I added the option to have the LoPy Node also connect to your local WiFi. Not necessary, but it makes it easier to debug/connect. If you leave that info blank, it will just ignore. Also, if you take the node outside of the range of you WiFi network, it will just ignore it. Another thing that I changed, is the use of config.py for the Node, so that you only need 1 place to change all the info. Finally I choose OTAA instead of ABP as the authentication for the node.

Lees verder….

Deel dit bericht:
mrt 112017
 

Toen ik afgelopen week met de micro:bit en de Circuit Playground (CPG) aan de slag ging, lukte het me niet om via serial een verbinding tussen de CPG in de richting van de micro:bit op te zetten in combinatie met de CPG library. Zónder die library kon ik dataverkeer beide kanten op realiseren, zodra ik de library initialiseerde met CircuitPlayground.begin(); ging er geen verkeer meer de kant op van de micro:bit.

De oplossing bleek te liggen in het gebruik van de hardware serial aansluitingen van de CPG in plaats van software serial waarmee ik aan de slag was. Tot nu had ik alleen met de hardware serial gewerkt als het ging om communicatie via de USB-poort van een Arduino. Dat deed ik dan via bv via Serial.println("Setup complete"); waarbij ik dan in de Serial monitor op mijn computer de output kon zien, ideaal voor het debuggen. Als een Arduino board een hardwarematige seriële aansluiting heeft (soms hebben ze er meer dan 1), dan kun je de andere hardwarematige poorten ook gebruiken. Die heten dan achtereenvolgens Serial1, Serial2 etc.
De hardwarematige poorten werken prima samen met de CircuitPlayground code. Ik heb een nieuwe versie van het script op Bitbucket gezet. In CPG_Serial_Slave.ino staat de versie met de softwarematige seriële poort in CPG_Serial_hardware.ino staat het script beter werkt en dan de hardwarematige seriële poorten gebruikt. De code op de micro:bit is nog steeds dezelfde microbit-Serial-Count-Master_and_Slave.hex die je hier kunt vinden.

De werking is als volgt: nadat beide script op respectievelijk de micro:bit en de CPG geladen zijn wachten de boards op een start teken. Door op de B-knop van de micro:bit te klikken begint het script daar. De micro:bit laat een tekst zien op het display waarin aangegeven wordt dat eerst een 0 (nul) naar de CPG gestuurd wordt. De CPG wacht totdat er data via de seriële lijn binnen komt. Is dat het geval, dan wordt de string die ontvangen is omgezet in een getal. Er worden dan evenveel Neopixels aangezet als het getal hoog is. Dan wordt hetzelfde getal terug gestuurd. Dat lijkt zinloos, maar de micro:bit wacht op het terug ontvangen van een getal voordat hij verder gaat, zo blijven beide processen in sync. De micro:bit laat zien dat hij +1 bij het getal optelt voordat hij het terug stuurt. Dat gaat verder totdat het getal groter is dan 10. Er zijn maar 10 Neopixels, dus reset de micro:bit het getal dan naar 0 en stuurt de 0 door zodat ook op de CPG alle Neopixels uitgeschakeld worden.

Ook dit was een test om het communicatiemechanisme beter te begrijpen. Interessant wordt het als ik nu een telefoon via Bluetooth aan de micro:bit koppel en instellingen draadloos door kan geven, of een WeMos D1 ESP8266 chip (kost zo’n 3 euro) om er voor te zorgen dat de CPG alsnog over een Wifi-verbinding kan communiceren. Dat zou via Firmata moeten kunnen, want ook die kan zowel via USB als via de hardwarematige seriële poort aangestuurd worden. Wordt dus later vervolgd.

Deel dit bericht:
mrt 052017
 

Vandaag heb ik eindelijk wat meer tijd kunnen besteden aan een van de “concurrenten” van de micro:bit, namelijk de Circuit Playground van Adafruit. En ik weet wel, het als een concurrent plaatsen maakt het meteen zo’n “wie is beter?” discussie en dat levert niet altijd de meeste informatie op. En ik neem ook aan dat als iemand van Adafruit dit bericht zou lezen (via Google Translate), ze meteen zouden zeggen dat ze het geen concurrent vinden, maar producten die naast elkaar kunnen bestaan. En dat is ook zeker zo, maar het kan hoe dan ook geen kwaad om beide producten ook met elkaar te vergelijken. Want ze hebben een groot aantal dezelfde functionaliteiten en toch ook weer duidelijke verschillen.

Ik heb ze hieronder naast elkaar gezet. De vorm is uiteraard verschillend, de Circuit Playground is rond, zoals een aantal andere boards die door Adafruit ontworpen zijn en zo gemakkelijker in kleding te verwerken zijn. Beiden hebben grote GPIO-aansluitingen waar je met krokodilbek-klemmen kabels aan kunt bevestigen. Ze hebben allebei drukknoppen, een kompas, een accelerometer aan boord. De micro:bit heeft een led pixel matrix met 1 kleur, de Circuit Playground heeft maar 10 pixels, maar dat zijn NeoPixels die heel veel kleuren kunnen hebben. De micro:bit heeft Bluetooth Low Energy (BLE), voor de Circuit Playground moet je daarvoor een aparte uitbreiding van bijna 20 euro aanschaffen. De Circuit Playground heeft een mini speaker (kan geluid maken, geen muziek op die manier) en een licht sensor. De micro:bit kan via een connector 20 IO-poorten beschikbaar maken. Beiden hebben capacitive touch mogelijkheden.

Op de externe connectiviteit via BLE na zou je zeggen dat beide apparaten niet zo heel veel van elkaar verschillen. Waar het al wat anders wordt is als het gaat om het open source hardware ontwerp van de micro:bit die iedereen in staat moet stellen om apparaten te produceren, terwijl de Circuit Playground alleen via Adafruit gemaakt wordt. Ook zijn er voor de micro:bit vele verschillende, online en offline ontwikkelomgevingen, bijvoorbeeld deze via https://pxt.microbit.org/. De Circuit Playground sluit aan bij de Arduino ontwikkelomgeving, al kun je er ook via Python tegenaan praten. Beide omgevingen hebben de nodige voorbeelden als het gaat om projecten die leerlingen kunnen bouwen, zie bijvoorbeeld deze pagina van Adafruit, al zal de micro:bit met de grotere installed base in het Verenigd Koninkrijk hier het voordeel hebben qua snelheid waarmee die voorbeelden uitgebreid worden.

Toen ik bij Adafruit het voorbeeld zag van een Circuit Playground in combinatie met een losse BLE adapter moest ik meteen denken aan de micro:bit die ik in huis had. Die heeft wél BLE én kan via RX/TX communiceren met de buitenwereld (voor uitleg over UART en RX/TX zie dit bericht), zou ik die niet aan de Circuit Playground kunnen koppelen? Nou, dat ging iets minder gemakkelijk dan ik gehoopt had. Hierboven kun je zien dat het gelukt is, al gebruik ik nog geen BLE. Ik heb een Arduino Leonardo via een seriële verbinding gekoppeld aan de micro:bit die op zijn beurt weer gekoppeld is aan de Circuit Playground. De Arduino geeft een getal tussen 0 – 10 door aan de micro:bit, die laat hem zien op zijn matrix en geeft hem dan weer door aan de Circuit Playground die op basis daarvan 0 – 10 Neopixels aanschakelt. Allemaal steeds via 1 draadje. Uitleg over de werking volgt in een aparte blogpost. Het weekend is namelijk al weer voorbij.

Deel dit bericht: