Zoekresultaten : micropython

apr 082018
 

Ik realiseer me dat de titel van dit bericht weer eens absoluut geen click-bait is. Als je toch verder leest: leuk! ūüôā

Voor wie denkt: waar heeft hij het nou weer over, eerst even kort wat uitleg. Zoals je wellicht weet zijn er naast Arduino en Micro:bit tal van andere interessante oplossingen op het gebied van microprocessoren, kleine uitbreidingskaartjes met een chip er op die net als Arduino en Micro:bit gebruikt kunnen worden om sensoren te lezen, randapparaten aan te sturen, maar die vaak een fractie van het geld kosten. Bekendste op dit gebied was ongetwijfeld de ESP8266, als je de link volgt kom je bij een aantal berichten op dit blog daarover. De ESP8266 heeft inmiddels een opvolger, de ESP32. Het heeft even geduurd voordat ook de firmware en ondersteuning voor de chip op orde was, maar inmiddels zijn ontwikkelbordjes met de ESP32 goed en goedkoop te krijgen (zeker via online shops zoals AliExpress). Ook over de ESP32 heb je hier al meer kunnen lezen, de LoPy van Pycom was de eerste ESP32 die ik hier in huis haalde naar aanleiding van de Kickstarter in augustus 2016 alweer. Dat was ook mijn eerste kennismaking met MicroPython. Een programmeertaal die voor mij helemaal niet zo vanzelfsprekend was omdat ik (toen) nog niet eerder met Python geprogrammeerd had.

Sindsdien gebruikte ik MicroPython uitsluitend op de LoPy’s. Want pogingen om het op een ESP8266 handig aan het werken te krijgen waren op niets uitgelopen. Het was simpelweg teveel gedoe om de code te wijzigen.

Bij toeval kwam ik echter op YouTube deze serie instructiefilmpjes tegen:

Ik bekeek hem en was onder de indruk van het gemak waarmee, met dank aan rshell het nu mogelijk was om bestanden te uploaden en wijzigen op de ESP32. Overschakelen naar de REPL, weer terug naar de shell, het ging allemaal heel soepel. En ik had toevallig nog een ESP32 liggen die niks lag te doen.
Ik had hem aangeschaft al node voor LoRaWAN / TTN, maar helaas had ik bij het bestellen niet goed opgelet en een versie op 433Mhz besteld in plaats van op 868Mhz. Je kunt hem hier vinden (even opletten dus!). Je hebt helemaal gelijk als je zegt “maar voor 16 euro kan ik ook een Micro:bit kopen”. Klopt. Maar dat komt door de LoRa-module en het kleine LCD-schermpje. Wil je een gewone ESP32 zonder LoRa-module en zonder LCD, dan kun je er hier al eentje voor minder van 4 euro (incl. verzenden) vinden. En dan heb je dus een microprocessor m√©t WiFi en BLE en batterij-aansluiting.

Goed, ik ging het proberen. Maar ik wilde het niet op een Raspberry Pi doen, maar in het Linux Subsystem dat ik op Windows 10 heb draaien. Waarom? Omdat ik wilde weten of het nu eindelijk een volwaardig alternatief geworden is. Spoiler: ja, dat is het, maar je moet er wel even wat voor doen.

Lees verder….

Deel dit bericht:
sep 112016
 

micropythonHet was hier weer even een paar dagen stil. En ook nu nog geen kant en klare “zo moet je nadoen wat ik gedaan heb” blogpost, meer een “dit heb ik zover voor elkaar”.
Het logo hiernaast is van MicroPython, zie het maar als het kleinere broertje of zusje van Python. Waarom kleiner (“micro”)? Kleiner, omdat het daarom mogelijk geworden is om Python zo goed als volledig/volwaardig te draaien op devices waarvan dat voorheen niet mogelijk was. Een voorbeeld daarvan is de micro:bit, maar die zal voorlopig nog erg zeldzaam zijn in Nederland. Met dank aan een succesvolle Kickstarter die onlangs plaats gevonden heeft, is er nu ook een versie voor de ESP8266. En daar heb ik er wel een paar van in huis. Daarnaast zal ook de LoPy, die als het goed is eind deze maand verstuurd wordt, direct ondersteuning hebben voor MicroPython. Tijd dus om er alvast eens in te duiken.

Je kunt best veel lezen over MicroPython, maar ik kan je zeker de videoserie aanraden die Tony DiCola¬†op het moment maakt voor Adafruit. Ze zijn wat langer, soms 45 minuten of iets langer, Maar Tony gaat heel uitgebreid en geduldig op de verschillende aspecten van MicroPython in. De video’s worden als livestream gemaakt, maar daarna toegevoegd aan hun eigen pagina met veel tekstuele toelichting, code-snippets en verwijzingen. Je kunt die op de Adafruit Learn website vinden.

Voor wat betreft “lezen” is deze eerste pagina¬†sowieso een heel goede om te beginnen. Daar kun je o.a. verwijzingen vinden naar:

Lees verder….

Deel dit bericht:
jul 242016
 

In de categorie “ik kan niet alles zelf uitproberen” zal ik de komende tijd ook een aantal voorbeelden die anderen gemaakt hebben met de micro:bit laten zien. Hierboven zie je er eentje die qua code (de¬†code is beschikbaar op github) heel eenvoudig is, geen √©cht doel heeft (nou ja, een spelletje) en daarmee wellicht wel juist een idee van iets wat je met je kinderen, leerlingen of studenten zou willen uitproberen.

Je moet er wel een strip Neopixels voor hebben. Dat zijn “leds” die verschillende kleuren kunnen hebben en allemaal individueel aan of uit te zetten zijn. De “originele” van Adafruit zijn hier te vinden, in Nederland kwam ik ze hier tegen.

Ik kon geen uitgebreide uitleg vinden bij de werking, maar over de wijze van aansturen zal ik nog wel een andere blogpost maken.

Deel dit bericht:
 Reacties uitgeschakeld voor BBC micro:bit NeoPixel pong met MicroPython  Tags: ,

Programmeren & Kunst

 Gepubliceerd door om 21:45  coding, Onderwijs
mrt 072018
 

Waarschuwing! Als je weinig tijd hebt, een deadline voor je werk, klusjes die je echt nog moet doen, lees dan niet verder. Want de kans is groot dat je namelijk het komende uur of langer bezig bent naar aanleiding van deze blogpost.

Ok, je bent gewaarschuwd. Het bericht van vandaag gaat over de workshop die Felienne Hermans vandaag tijdens de tweede dag (ochtend) van de NIOC conferentie verzorgde. Hij was getiteld “Programmeren & Kunst” en ik had al uit de beschrijving begrepen dat we ook echt met Python aan de slag zouden gaan.

Nou ken ik voldoende (micro)Python om me wel te redden, maar het ging me om de combinatie met Kunst. Felienne had op dinsdag tijdens haar keynote er al kort iets over verteld.

De WORKshop begon met het op het beeldscherp typen van dat woord door Felienne: dit is een WORKshop, dus pak je laptop maar.

Voor de workshop maakten we gebruik van repl.it, een gratis dienst waarmee je o.a. een Python editor en live REPL in je browser krijgt. Geen noodzaak dus om Python op je computer te installeren. Handig en snel, zeker ook in een onderwijssetting. Wil je de code bewaren, dan is het aanmaken van een gratis account handig. Leuk ook is dat je je code heel eenvoudig kunt delen. De code voor de gif hierboven bij het bericht is hier te vinden. Wil je zelf verder werken met die code dan kun je op de “fork” knop klikken.

En het laat meteen de waarschuwing zien: vandaag bij de workshop was ‘spirograaf’ niet de opdracht waar we aan gewerkt hebben. Dat heb ik daarna gedaan, toen ik eigenlijk ‘even snel’ een blogpost had willen maken, waarvan het daarna een stuk langer duurde voordat die af was. De PDF met uitleg is hier te vinden.

Tijdens de workshop ging het om het verzinnen van gekke verhalen. Felienne liet kort zien dat je maar een klein stukje code nodig hebt (haar voorbeeld kun je hier forken) om te beginnen bouwen aan een gek verhaal. Daarna gaf ze het al snel aan ons over. Niet iedereen had een laptop en ook nu was dat handig. Want in groepjes was de opdracht veel leuker: maak een gek verhaal in Python. De docentinstructie kun je hier vinden.

Het resultaat van ons groepje staat hier. Elke keer als je op de run-knop drukt, krijg je een ander verhaaltje.

Leuk was dat er heel verschillende resultaten uit kwamen van de verschillende groepjes. Dus niet alleen in gekozen woorden, maar sommigen waren wat verder gegaan met loops, keuzes, input opvragen etc.
Iedereen ging ook best wel los op de opdracht. En dat was heel grappig om te zien: minimale code vooraf uitgelegd, een heel eenvoudige online omgeving en je kunt volwassenen en kinderen/jongeren los laten gaan in hun creativiteit en dan intussen laten oefenen met hun programmeervaardigheden.

 

Deel dit bericht:

Circuit Playground Express

 Gepubliceerd door om 07:25  Algemeen
mei 282017
 

Before the Circuit Playground Express, there was the Circuit Playground Developer Edition (now: “Classic). They look almost the same, but there are some small, yet important, differences between the two iterations (see the table with the overview). One is very important: the processor is different and the Express has got 2 MB of flash memory.

Because of this difference, the Circuit Playground Express, unlike the Classic can be programmed using this online programmer. It uses a Blockly like language, in an environment very similar to what you can use for the Micro:bit. This of course makes it more suitable for use in schools and with younger students with less experience in programming. With the Classic you had to use the Arduino environment to program it.

Another difference between the two versions is the infrared receiver and transmitter, allowing for data transmission using infrared light, similar to what the Puck.js does. It also can be used as a proximity/distance sensor. You can hear lady Ada explain how that works here.

 

Now, just as with the Classic, for me the use-cases for the Express are a bit harder to find. I can understand that it is a cool device to get children programming. And of course, a lot of the use-cases of the Micro:bit, where you attach peripherals using alligator clips and do cool stuff based on values that you measure with either the build in sensors or other external sensors. The Express then allows you to have a nice mix of programming languages: either the Blockly variant with the one-on-one switch to JavaScript in the editor and CircuitPython, the microPython fork that Adafruit is developing (see this video where Tony demos CircuitPython on the Express).

Resources for the Express are still somewhat limited, the board is still very limited in availability¬†which was one of the reasons why I was very glad that after it actually was in stock for a couple of hours last week, it was sent and transferred from the US to Europe in exactly 7 days. Not bad. It is a bit more expensive than a Micro:bit, which you currently can buy direct in the Netherlands. We’ll see how this develops. If you’ve got any questions related to stuff that I could test with the Circuit Playground Express, let me know.

Deel dit bericht:

LoRaWAN with LoPy and KPN + Loggly

 Gepubliceerd door om 15:49  Hardware, LoRaWAN
mei 202017
 

In the Netherlands, KPN¬†was the first to offer nationwide coverage of a IoT network based on LoRaWAN. You can read about my first tests using their Network in combination with the Marvin node in this post. Unlike with the IoT network that for example is currently being rolled out by T-Mobile, which uses¬†NB-IoT and different hardware than The Things Network (TTN), switching a device from the TTN network to the KPN network is simple: just change the¬†DEV_ADDR, NWK_SWKEY, APP_SWKEY values in the config.py of you Pycom LoPy to the values that are provided in the management environment of KPN (see image left). No changes in the microPython code needed. You could even have a device connect to both networks and switch between them (although you probably don’t want to do that when you’ve got a battery powered node).

KPN offers a free test period where you can test your nodes on their infrastructure without having to pay. It is what I used for my train trip last month where I used both the Marvin node (connected to KPN) and the LoPy (connected to TTN) as a way to get a feel for coverage while moving in the Netherlands.

Besides the fact that KPN offers a commercial solution, the free test version (don’t know about the paid version) has a number of differences: unlike TTN where they provide a number of integration options (Cayenne, Data Storage provided by TTN, HTTP integration, IFTTT Maker), KPN only offers HTTP integration. This means you have to provide a destination URL for an HTTPS endpoint where the data is stored. In the Marvin workshop they use¬†Hookbin.com as a free and easy to setup endpoint. But endpoints created there only store data for a limited time. That is why I now use the free version of Loggly.com¬†to collect the data. But of course, the data is only useful if I manage to get it from Loggly to my own local system.

A second difference is a bit of a mystery. If I used the Marvin to send data over the KPN network, the data gets encrypted by the Marvin, but automatically is being decrypted again on the KPN server. But if I use the LoPy to send data over the KPN network, the data shown in the debug console at KPN and the data received by Loggly is still encrypted.

I managed to get both challenges resolved and in this post I’ll do a write-up not of the (lengthy) process of getting to the working code, but of the end result. All code is available on Github.

Lees verder….

Deel dit bericht:
mei 142017
 

At AliExpress they sell a number of cheap GPS modules that you can use for Arduino. I ordered one (this one)¬†GY-NEO6MV2¬†for ‚ā¨6,82 incl. free shipping (the seller doesn’t offer free shipping anymore so you might want to shop around a bit) and wanted to try it out on the LoPy. Now, I wanted to say that using it is really easy, it is, but then again there were more than enough bumps in the road to get it to work the way I wanted it. But hey, what is life without some challenges?

First things first: the¬†GPS module is easy to use. It use UART to connect to it. As soon as you have got something that is willing to listen to it, power it (it worked using 3.3V), it start sending you GPS data that you only need to interpret. I soldered 4 header pins to the module, connected the VCC to the 3.3V, GND to GND on the Pyboard, the TX line to “P11” and the RX line to “P12”.

As soon as you connect power to the LoPy, the GPS unit is powered. The red light blinking means that the unit is working and sending data. You just need to listen to it.  The code to do that is available here on GitHub.

To start listening:  com = UART(1,pins=(config.TX, config.RX), baudrate=9600)

To interpret the data coming from the module, I use the MicropyGPS module. It is initialized using my_gps = MicropyGPS().

After that it is a matter of checking if there is any data available, and then feed it character by character to the module:

if com.any():
    my_sentence = com.readline()
    for x in my_sentence:
        my_gps.update(chr(x))

 

Lees verder….

Deel dit bericht:
apr 102017
 

Als het in het onderwijs in Nederland over “programmeren” gaat worden eenvoudige vragen al heel snel ingewikkeld. Dus een vraag als “Welke programmeertalen zouden onze leerlingen/studenten moeten kennen?” (bron) is niet helemaal zonder risico. Immers, je moet dan gaan nadenken over het doel dat je daarmee hebt. Wil je ze leren programmeren? Of juist coderen? Of software ontwikkelen? Ik ga niet eens proberen naar bronnen te linken die ze op √©√©n hoop of op juist heel verschillende hopen (en dan per bron ook verschillend) gooien.

Dus laat ik het maar even veilig houden in deze blogpost. Zo’n 9 jaar geleden¬†vroeg ik me af welke programmeertalen ik allemaal zou moeten leren. Zoals ik toen beschreef:¬†¬†¬†Basic¬†was mijn eerste kennismaking met programmeren, maar daar kon je (toen) zo weinig mee dat ik er niet veel interesse voor had. Op de universiteit leerde ik Turbo Pascal¬†om daar vervolgens nooit meer wat mee te doen. Daarna kwam ik in de Windows omgeving en Visual Basic¬†(binnen Office!) en Active Server Pages¬†(ASP) terecht. Mijn eerste kennismaking met¬†JavaScript¬†was in de browser, ASP werd vervangen door PHP¬†toen ik weblogtools ging gebruiken op basis van die taal. En daarna werd het een opeenvolging van “wat heb ik nodig”. Zo kwam er een beetje¬†Python¬†bij, een heel klein beetje .NET¬†en eveneens een klein beetje Java. Dat was toen. Sindsdien zijn er dingen gewijzigd en gelijk gebleven.

Lees verder….

Deel dit bericht:
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:
apr 022017
 

If there is a thing that is dislike most, than it is giving up on a technical problem before it is solved. So, although this weekend a late cold finally managed to make me sleep more than usual, I did manage to spend some time with The Things Network, the LoPy Nano Gateway and the Marvin Node.

So, one thing that really can kill your debugging efforts is the fact that the backbone for The Things Network is rock solid stable. I don’t know whether that just is the case during the weekend, but like last week, this weekend there were some outages. There is no single status page that you can check, so that makes it a bit hard. But I’m starting to learn that if the console page act oddly, like failure to show the gateways that I defined, or if suddenly everything is displayed is disconnected, it might just be that they are having problems on their end.
Who am I to complain about a free service? I know, still, an automated page that tells me if I need to just wait and do other stuff, would be nice.

But during the uptime, I was able to get some more stuff working.

First of all: the code that Alex used in the video¬†does work, just make sure you select “Packet forwarder”.

Another thing to know is that the default abp_node.py script has this code:

for i in range (200):
s.send(b'PKT #' + bytes([i]))
time.sleep(4)
rx = s.recv(256)
if rx:
print(rx)
time.sleep(6)

Basically it just sends 200 packages within a short time and then stops. So if you don’t know that, you’ll think the node stopped working. It does, but on purpose. Now if you reset the LoPy, it will start again, but the TTN backbone will ignore that data because the LoPy will start again with package #0, and the backbone will already have a package #0. The quick solution during testing is to reset the frames counter for the device.

Also, the test script is nice for testing, but LoRaWAN was not build for a rapid stream of data, so make sure you read the post about the TTN Fair Access Policy, even with small messages at close range, the 500 messages (of 10 bytes each) per day at SF7 means max. 1 message per (about) 3 minutes, the script sends one every 10 seconds. Granted, it stops after 200 messages, but if you repeat that 2-3 times during testing, you go above that.
For me, testing it on my own Nano Gateway, the chances that I “steal” airtime from other nodes is small, but if you’re using someone else’s gateway, you could be causing problems for other nodes being unable to get their messages through.

But like I said in the title, the weekend showed there is still some love left. I managed to get a few more things working with my two nodes.

Lees verder….

Deel dit bericht:
:)