Arduino

Deze pagina is (in aanmaak) voor de Arduino serie zoals de Arduino Nano (8-bits Atmel), en 'vergelijkbare' bordjes als de Wemos D1 mini (Arduino-compatibel WiFi bordje met de ESP8266, een 32-bits processor).

Project-pagina's met complete projecten:

Arduino Nano

De Arduino Nano is een klein bordje met de Atmel ATmega328. Heeft wat meer mogelijkheden en gebruiksgemak dan de ATtiny die ik veel heb gebruikt, en omdat het een kant-en-klare module is zit ik niet met een chip die lastig te solderen is... Nano op mijn handBovendien, heeft een USB-aansluiting waarmee er geen aparte programmer nodig is, zoals bij mijn ATtiny. Bedankt, Arduino!

Kleiner dan de gebruikelijke Arduino's als de Uno, en je kan geen 'shields' gebruiken, maar dat had ik voor mijn doel niet nodig. Iets minder low power dan de low-power ATtiny oplossing door de voeding LED en zo, maar nog steeds minder dan 10 mA.

Je kan de Nano in C/C++ programmeren, of met behulp van de Arduino IDE zogeheten 'sketches' maken. Heb in eerste instantie even voor de laatste stap gekozen. Ik werk met Ubuntu/Linux en heb de Linux 64-bit IDE van de Arduino site gehaald. Daarna installeren en als test de eerste sketch draaien, zie de 'Arduino getting started' gids voor Linux. Kies voor het bord uiteraard de 'Arduino Nano' (met de 'ATmega328' processor). Voor de poort moest ik in mijn geval kiezen voor /dev/ttyUSB0. Ik had mezelf al toegevoegd aan de groep dialout (zie hoofdstuk 9 in de getting started gids), dus bij het doorlopen van de stappen en het uploaden van de Blink sketch (een van de meegeleverde voorbeelden) werkte het in een keer goed: de LED knippert!

ATmega328

De processor op de Nano is iets zwaarder dan de ATtiny die ik meestal gebruikte:

  • 32Kbyte Flash prgrammageheugen
  • 1Kbyte EEPROM datageheugen
  • 2Kbyte RAM geheugen
  • 8 analoge ingangen
  • 6 PWM uitgangen
  • Seriële poort, I2C, SPI, etc
  • 20 MHz (16 voor de Nano)
  • Voeding 1.8 - 5V

Waarom een ouderwetse 8-bitter, en niet een simpele ARM M0 32-bit als de LPC8xx? Ik wilde snel iets kunnen maken, en dan zijn de grote gebruikersgroep, de eenvoudig gehouden IDE en de beschikbare voorbeelden/libraries van de Arduino-omgeving een voordeel, al is de processor zelf dan niet meer het modernste... Onderstaand LCD/sensor-voorbeeld had ik in een uurtje in elkaar, zonder van te voren de ontwikkelomgeving te kennen. Ondertussen zijn er ook 32-bit processoren met Arduino-support, zie verderop de ESP8266-bordjes.

Nano Pinout

Let op, de 5V en de 3V3 (3.3 Volt) zijn uitgangen; voeden via de VIN of via USB!

Arduino Nano Pinout

ESP8266 bordjes

De ESP8266 chip van Expressif is erg populair op het moment, en hoewel het niet van Arduino komt, is het wel compatibel met de ontwikkelomgeving (met minimaal Arduino ontwikkelomgeving versie 1.8 of hoger, en je het juiste 'board support package' geladen hebt: zie de meest recente versie op de ESP8266 Github). Veel bordjes mee verkrijgbaar, in het algemeen met een aantal voorbeelden boven de Arduino's:

  • Standaard WiFi, dankzij de ESP8266 chip van Expressif. De benodigde software libraries zitten in de Arduino omgeving meeverpakt.
  • WiFi b/g/n, WEP of WPA/WPA2 authenticatie (of geen wachtwoord)
  • Er zit een 32-bits processor op (Tensilica L106) op 80 MHz, en veel meer werkgeheugen (ongeveer 50 Kbyte vrij, plus een 4 Mbit = 512 Kbyte Flash chip)
  • Goedkoop, bijvoorbeeld onderstaande Wemos voor €6,50 bij TinyTronics in Nederland, maar als je geen haast hebt krijg je ze in China goedkoper
  • Is onderdeel van een uitgebreide serie bordjes met de ESP8266 (ook de Home Control Sonoff 220V WiFi schakelaar is hierop gebaseerd).
  • Nadeel: meer stroomgebruik, zeker 140 mA bij ontvangen, en meer bij zenden
  • Nadeel: minder I/O dan een Arduino: 11 digitale input/output pinnen, met interrupt/PWM/I2C/one-wire support (behalve op D0), 1 analoge input
  • Meer informatie: zie de ESP8266 Wikipedia pagina.

Er is overigens al een nieuwere versie uit: de ESP32. Deze heeft onder andere ook Bluetooth. Maar, heb zelf nog ervaring met de ESP32.

WEMOS D1 mini

WeMos D1 Mini V3 op breadboard
Wemos op breadboard, met LED en schakelaar.
Links de USB aansluiting/voeding.

December 2017: vanavond de Wemos D1 mini binnengekregen, en gelijk maar eens proberen. Al met al een leuk bordje voor projecten die wat meer eisen (ook qua stroom...). Zie de pin-out hieronder, en/of het schema van de WeMos mini (oude versie). On-board antenne, dus niet vreselijk gevoelig (maar ook niet slecht).

De WEMOS D1 mini kan je dus met de Arduino ontwikkelomgeving gebruiken. Er wordt gezegd dat je ook de driver voor de seriële poort moet installeren (niet de standaard FTDI, maar die voor de CH340G chip), maar onder Linux/Ubuntu 16.04 werd de driver automatisch herkend bij het aan de USB hangen van de D1 mini (bij mij als poort ttyUSB0). Snelle test: kies in de Arduino omgeving onder Tools voor de 'WeMos D1 R2 & mini', dan bij File voor Examples --> ESP8266 --> Blink. Dan Sketch --> Upload, en de blauwe LED gaat knipperen!

Hier goede documentatie van de ESP8266WiFi library, niet alleen van de WiFi maar ook van de pinout, het Flash file systeem, de I2C/SPI etc.

Volgende stap is natuurlijk WiFi testen... Heb ik gedaan met de code van de ESP8266 tutorial op diyhacking (alleen hoofdstuk "Uploading the ESP8266 Code", en de LED zit al op het bordje). Hiermee wordt op de Wemos een simpele webserver gezet, zodat je via een webpagina op je PC of telefoon de LED op de Wimos aan en uit kunt zetten. Na het invullen in de code van de naam en wachtwoord van mijn Wifi, de zaak compileren, en uploaden: op de seriële monitor van de Arduino omgeving (Tools --> Serial Monitor, snelheid op 115200 zetten) was te zien dat de Wimos netjes een IP adres had gekregen. Helaas, vanaf de browser kon ik dat adres niet benaderen... Maar, na een reset van de Wimos en het nog eens proberen, werkte het wel. Kreeg een simpele webpagina te zien, met daarop twee links, een om de LED aan te doen, en een om hem weer uit te doen. Perfect, goed besteed uurtje. Een foutje: 'LED aan' zette hem uit, en omgedraaid. Vermoedelijk omdat de source bedoeld was voor een ander bordje (ESP-01), waarbij de LED anders is aangesloten dan op de mini. Ach, het werkt, genoeg voor vandaag. Tevreden.

Wemos D1 mini V3 pinout

Let op, pin out is net weer wat verschillend vergeleken met sommige andere ESP8266 bordjes...

Pin Function ESP-8266 Pin   Pin Function ESP-8266 Pin
RST Reset RST   TX TXD GPIO1
A0 Analog input, max 3.3V
A0   RX RXD GPIO3
D0 IO (geen interrupt!)
GPIO16   D1 IO, I2C SCL GPIO5
D5 IO, SPI SCK GPIO14   D2 IO, I2C SDA GPIO4
D6 IO, SPI MISO GPIO12   D3 IO, 10k Pull-up GPIO0
D7 IO, SPI MOSI GPIO13   D4 IO, 10k Pull-up, BUILTIN_LED GPIO2
D8 IO, 10k Pull-down, SPI SS GPIO15   G Ground GND
3V3 3.3V 3.3V   5V 5V

Serial WiFi met ESP-07

Nog een bordje met de ESP8266: de 'Serial WiFi v1.0', een printje met de Ai-Thinker ESP-07 module: met mogelijkheid om een aparte WiFi-antenne op aan te sluiten. Bedoeld om een normale Arduino van WiFi te voorzien (als een soort modem), maar kan dus ook zelfstandig gebruikt worden als een ESP8266 bordje.

Probleem is alleen dat er geen headers of zo op zitten, alleen maar twee pinnen voor senden/ontvangen (Tx/Rx) naar een Arduino. Als je het (als een Wemos) zelfstandig wilt gebruiken kan je het niet makkelijk op een breadboard aansluiten maar je moet direct aan de kleine soldeer-eilandjes van de ESP-07 solderen. Dat is voor mij geen probleem. Aan de andere kant, kan wel vanuit 5 Volt gevoed worden, en heeft verder aardig dezelfde mogelijkheden als de Wemos, is alleen goedkoper, en heeft dus de mogelijkheid tot 'echte' WiFi-antenne. Mooi voor als je iets eerst op de Wemos wilt ontwikkelen, en dan in wilt bouwen met dit printje.

Projecten

Nano met 16x2 LCD display
Prototype bordje met Arduino, display en temperatuur

Nano: De eerste software

Februari 2016: Een van de projecten die ik nog wil doen is een thermostaat om 'Sous-Vide' te kunnen koken. Een ATtiny is voldoende, maar op de Nano kan ik sneller een prototype maken. Wat wil ik aansluiten: een LCD display, een temperatuursensor, en een 220V optisch gekoppeld Solid State Relais. En dan een software PID-regelaar voor een mooie constante temperatuur. Daarnaast is de regeling van mijn keramiek-oven aan een update toe, zie verderop.

Eerst het aansluiten van een 16x2 LCD'tje, wat ik uit eerdere experimenten nog had liggen. Ook hier is er een kant-en-klaar software voorbeeld in de Arduino ontwikkelomgeving dat ook nog eens compatibel is met mijn display: 'Hello World' (kijk bij File -> Examples -> LiquidDisplay -> HelloWorld). Alleen, hoe sluit je de pinnen aan? Daarbij heeft onderstaand Nano Pinout-diagram geholpen. De pinnummers zoals in de sketches worden gebruikt zijn daar de paarse nummers helemaal links (en staan ook op de print). Ook op LiquidCrystal Library staat uitleg. Van het display had ik documentatie, en dan is het een kwestie van 9 draadjes stuk voor stuk zorgvuldig aansluiten.

Volgende stap: de I²C temperatuursensor... Ik heb al eerder op de Raspberry de LM75BD temperatuursensor van NXP gebruikt, beviel prima. Op Tutorial: Arduino and the I2C bus staat heel wat over hoe op de Arduino met de Wire library I2C-devices uit te lezen. De daar gebruikte CN75 is compatibel met de LM75BD, alleen slechts met 0.5 graden resolutie. 4 draadjes (5V, GND, clock en data). Op de foto links (aan de dikke rode 'draad') zit de LM75BD.

Eindresultaat van de ovencontroller
En zo ziet de ingebouwde oven-controller er uit
(teruggeplaatst in mijn oude kastje).
Display: "E=10", energieniveau 10 van de 16.

Nano: Keramiek-oven

Vanwege de grootte van dit projectje is het naar een aparte pagina verhuisd. Zie mijn Arduino Nano Oven-controller pagina (en het plaatje rechts) voor het resultaat.

Wemos en MQTT

Uiteindelijk is het de bedoeling dit in te zetten voor domotica/home automation. Daarvoor wil ik de LED aan en uit kunnen zetten via de mosquitto MQTT broker op mijn Raspberry. Gelukkig is ook hier een goede Arduino library beschikbaar, PubSubClient. Hiermee kon ik vrij snel een twee-richtingen link maken tussen de blauwe LED op de Wemos en de MQTT Dash op mijn tablet, en kan ik de LED nu via een icoontje op de Dash aan en uit schakelen. De LED schakelen gaat ook met een schakelaar aan de Wemos, waarbij dit weer aan de MQTT server doorgegeven wordt, en de status op mijn tablet wordt bijgewerkt. Totaal nog geen 200 regels source; inclusief commentaar en zo. Weer een stap verder!

De eerste tests kunnen gewoon met alleen de Wemos aan een USB-kabeltje. Wil je wat meer testen dan is een simpel breadboard handig. Het plaatje verder naar boven toont de 'proefopstelling' waarbij ik naast de schakelaar ook nog een extra rode LED heb aangesloten op D5/GPIO14. Met de PWM-functie kan ik deze via MQTT/internet dimmen.

Wel nog een klein puntje: bij de ESP8266 wordt timer1 al gebruikt door de WiFi stack... Dus niet de Arduino TimerOne library gebruiken. Ik gebruik zelf nu de Ticker library van ESP8266, was voor deze toepassing ook voldoende.

Sonoff lichtschakelaar

MQTT Dashboard
Android MQTT Dash, met de kerstboom op de Sonoff1 module

De Sonoff is een goedkope (rond €5) kant-en-klare module om via Wifi 230V te schakelen. Intern ook met de ESP8266, en herprogrammeerbaar met de Arduino omgeving. De standaard geleverde software kan natuurlijk ook, maar die werkt voor zover ik weet alleen met een externe IoT server, en dat heb ik liever in eigen hand: via een mosquitto MQTT server op mijn Raspberry (ook voor de slimme energiemeter en zo). Had natuurlijk ook voor ESPeasy kunnen gaan (Youtube), maar gezien mijn ervaring met de Wemos leek het me leuker het zelf te doen. Hoe moeilijk kan het zijn ;-) ...

De applicatie die ik had op de Wemos kon ik vrij snel overzetten, alleen de GPIO-nummers aanpassen: relais op GPIO12, led op GPIO13, en de drukschakelaar op GPIO0. Voor het 'flashen' van de software moet je wel eerst een 5-pins header op de Sonoff solderen. Dan via een USB-to-serial kabeltje en aanpassing van 5 Volt naar de benodigde 3.3 Volt aansluiten op je computer. De Arduino-omgeving kan vervolgens de Flash op de Sonoff schrijven (setting: 'Generic ESP8266 module', geheugen 1 MB Flash met 64 KB SPIFFS). Loskoppelen, Sonoff kastje er weer om heen (header kan blijven zitten), en aansluiten op lichtnet/lamp. Nu heb ik een WiFi-bestuurbare schakelaar!

Sonoff programmer
FDTI USB-to-serieel; 5 Volt naar 3.3 Volt niveau's, en dan de binnenkant van de
Sonoff met de daarop gesoldeerde 5-pin header: programmeren!

Via bijvoorbeeld MQTT Dash op mijn telefoon en tablet kan ik nu de tijden voor de kerstboomverlichting instellen; zie de interface links (Sonoff1). Kan de kerstboom ook handmatig schakelen door op het lamp-symbool te klikken. Je ziet ook aan het symbool of de verlichting aan of uit staat, wordt via MQTT allemaal real-time aan elkaar gelinkt. En ook het drukknopje op de Sonoff werkt nog, en geeft ook weer real-time de status door naar MQTT.

IoT Energieverklikker

Om je bewust te worden van je energiegebruik is het handig gelijk 'feedback' (terugkoppeling) te krijgen: je ziet wat je gebruikt. Ik heb daarom een 'IoT'-lampje gemaakt dat op ieder moment door de kleur weergeeft wat je energiegebruik op dat moment is. Gebruik je veel energie, dan wordt het rood, leveren je zonnepanelen veel op dan wordt'ie blauw-groen, en een heel kleurenpalet daar tussenin. Zie de plaatjes en beschrijving op de Energieverklikker-pagina.

En verder

Links naar algemene info

Nuttige Libraries etc

ESP8266

Wat random links over de ESP8266, integratie in Arduino, en de Wimos D1 mini