Mijn pad naar het IoT (10): Het Pretzel-Board
27 juli 2016
op
op

De vaste lezers van deze serie weten het: voor mijn eerste IoT-project voor het op afstand bedienen van een lamp heb ik tot nu toe nog een PC nodig als relaisstation. Die ontvangt tekstcommando’s als MQTT-client en geeft die via USB door aan een microcontrollerkaart.
Op den duur wil ik die PC vervangen door een controllerkaart die zelf een MQTT-client kan draaien. We hebben in het vorige deel al een kleine bibliotheek uitgeprobeerd, en daarbij hebben we geleerd hoe simpel MQTT-berichten voor het publiceren van gegevens zijn opgebouwd.
Wat nu nog ontbreekt is een microcontrollersysteem dat TCP /IP-berichten kan verzenden en ontvangen. Veel projecten maken tegenwoordig gebruik van WLAN en de gemakkelijk te gebruiken chip ESP 8266, die we kunnen besturen via een seriële interface en op tekst gebaseerde AT-commando’s.
Om deze chip eerst eens te leren kennen, heb ik een eenvoudig evaluatieplatform aangeschaft, namelijk de Maker Kit IoT van Fabian Kainka, die ook in de Elektor-shop verkrijgbaar is. Het belangrijkste onderdeel van de kit is het zogenaamde Pretzel-Board: daarop bevindt zich naast de ESP 8266 ook een ATmega328-controller die is voorzien van een Arduino-bootloader. De UART-interface van de ESP 8266 is verbonden met twee pennen van de ATmega328. De hardware-UART van de AVR -controller is gereserveerd voor de communicatie via USB , dus we hebben een software-UART nodig. Een kleine schakeling op de kaart verzorgt het aanpassen van de spanningsniveaus.
Voor de eerste experimenten is het voldoende om de Arduino-ontwikkelomgeving te downloaden en de Pretzel-kaart via USB met de PC te verbinden. Hoewel ik geen uitgesproken fan ben van de Arduino-IDE en de Arduino-library’s, wilde ik die om te beginnen toch gebruiken, om me niet te veel problemen tegelijk op de hals te halen (de controller op de kaart is ook te programmeren via ISP , als we een 2x3-header insolderen).
Ik ben begonnen met het eerste voorbeeldprogramma uit het handboek. Als het programma is geüpload (kies als board de „Arduino Nano“), geeft de controller alle tekens die via USB binnenkomen rechtstreeks door aan de ESP 8266 en omgekeerd. Dan kunnen we via een terminalprogramma op de PC rechtstreeks communiceren met de ESP 8266 op het Pretzel-Board.
Ik gebruikte daarvoor mijn favoriete terminalprogramma hterm. Om te beginnen probeerde ik het verbinden van de kaart met het WLAN-netwerk in huis uit (hoofdstuk 1.1). De AT-commando’s zijn heel gemakkelijk en ik kon probleemloos inloggen in het WLAN van mijn kantoor aan huis.
Daarna begon ik met pogingen om TCP /IP te gebruiken. Ik sloeg de rest van hoofdstuk 1 en heel hoofdstuk 2 (UDP) over, maar ik probeerde wel het eerste voorbeeld van hoofdstuk 3. Daarbij doen we alsof we een webbrowser zijn, waarmee we HTML-code opvragen van de website www.example.com met het HTTP- GET -commando.
Daarna wilde ik tekens verzenden binnen mijn intranet. Als TCP -server, die tekenreeksen ontvangt en weergeeft, gebruikte ik mijn zelf geprogrammeerde, eerder beschreven MQTT-client met de TCP -server-uitbreiding. Na een klik op „ TCP listen“ luisterde deze naar aanvragen van de TCP -client ( ESP 8266).
Met
AT+CIPSTART=" TCP ","192.168.0.15",80
AT+CIPSEND=3
bereidde ik de ESP 8266-chip voor om een teken (plus de twee tekens CR+LF, die mijn terminalprogramma achter een te verzenden tekst hangt) te verzenden.
Na het invoeren en verzenden van het teken in het terminalprogramma kwam het ook keurig tevoorschijn in het ontvangstvenster van de TCP -server. Helaas beëindigde de ESP 8266 kort daarna de verbinding. Dat kon mijn TCP -server (nog) niet opvangen, dus moest ik hem afsluiten en opnieuw starten en opnieuw op de knop „ TCP listen“ drukken. Hoe dan ook, het eerste experiment was geslaagd. In de volgende aflevering kunt u lezen hoe het verder ging!
Op den duur wil ik die PC vervangen door een controllerkaart die zelf een MQTT-client kan draaien. We hebben in het vorige deel al een kleine bibliotheek uitgeprobeerd, en daarbij hebben we geleerd hoe simpel MQTT-berichten voor het publiceren van gegevens zijn opgebouwd.
Wat nu nog ontbreekt is een microcontrollersysteem dat TCP /IP-berichten kan verzenden en ontvangen. Veel projecten maken tegenwoordig gebruik van WLAN en de gemakkelijk te gebruiken chip ESP 8266, die we kunnen besturen via een seriële interface en op tekst gebaseerde AT-commando’s.
Om deze chip eerst eens te leren kennen, heb ik een eenvoudig evaluatieplatform aangeschaft, namelijk de Maker Kit IoT van Fabian Kainka, die ook in de Elektor-shop verkrijgbaar is. Het belangrijkste onderdeel van de kit is het zogenaamde Pretzel-Board: daarop bevindt zich naast de ESP 8266 ook een ATmega328-controller die is voorzien van een Arduino-bootloader. De UART-interface van de ESP 8266 is verbonden met twee pennen van de ATmega328. De hardware-UART van de AVR -controller is gereserveerd voor de communicatie via USB , dus we hebben een software-UART nodig. Een kleine schakeling op de kaart verzorgt het aanpassen van de spanningsniveaus.
Voor de eerste experimenten is het voldoende om de Arduino-ontwikkelomgeving te downloaden en de Pretzel-kaart via USB met de PC te verbinden. Hoewel ik geen uitgesproken fan ben van de Arduino-IDE en de Arduino-library’s, wilde ik die om te beginnen toch gebruiken, om me niet te veel problemen tegelijk op de hals te halen (de controller op de kaart is ook te programmeren via ISP , als we een 2x3-header insolderen).
Ik ben begonnen met het eerste voorbeeldprogramma uit het handboek. Als het programma is geüpload (kies als board de „Arduino Nano“), geeft de controller alle tekens die via USB binnenkomen rechtstreeks door aan de ESP 8266 en omgekeerd. Dan kunnen we via een terminalprogramma op de PC rechtstreeks communiceren met de ESP 8266 op het Pretzel-Board.
Ik gebruikte daarvoor mijn favoriete terminalprogramma hterm. Om te beginnen probeerde ik het verbinden van de kaart met het WLAN-netwerk in huis uit (hoofdstuk 1.1). De AT-commando’s zijn heel gemakkelijk en ik kon probleemloos inloggen in het WLAN van mijn kantoor aan huis.
Daarna begon ik met pogingen om TCP /IP te gebruiken. Ik sloeg de rest van hoofdstuk 1 en heel hoofdstuk 2 (UDP) over, maar ik probeerde wel het eerste voorbeeld van hoofdstuk 3. Daarbij doen we alsof we een webbrowser zijn, waarmee we HTML-code opvragen van de website www.example.com met het HTTP- GET -commando.
Daarna wilde ik tekens verzenden binnen mijn intranet. Als TCP -server, die tekenreeksen ontvangt en weergeeft, gebruikte ik mijn zelf geprogrammeerde, eerder beschreven MQTT-client met de TCP -server-uitbreiding. Na een klik op „ TCP listen“ luisterde deze naar aanvragen van de TCP -client ( ESP 8266).
Met
AT+CIPSTART=" TCP ","192.168.0.15",80
AT+CIPSEND=3
bereidde ik de ESP 8266-chip voor om een teken (plus de twee tekens CR+LF, die mijn terminalprogramma achter een te verzenden tekst hangt) te verzenden.
Na het invoeren en verzenden van het teken in het terminalprogramma kwam het ook keurig tevoorschijn in het ontvangstvenster van de TCP -server. Helaas beëindigde de ESP 8266 kort daarna de verbinding. Dat kon mijn TCP -server (nog) niet opvangen, dus moest ik hem afsluiten en opnieuw starten en opnieuw op de knop „ TCP listen“ drukken. Hoe dan ook, het eerste experiment was geslaagd. In de volgende aflevering kunt u lezen hoe het verder ging!
Read full article
Hide full article
Discussie (2 opmerking(en))
Ton van Sluisveld 8 jaar geleden
Mooie reeks! alleen moet je een ding voor me doen.
Voeg ergens de link 'http://iot.fkainka.de/library' toe.
Het is een link naar de library voor het NanoESP board (jouw pretzel-board).
Ik heb zelf je hele pad gevolgd, incl. de maker kit, en nog in de manual van de kit, nog in de artikelen van je quest wordt over de bibliotheek over gesproken. Het zou het leven een stuk eenvoudiger maken ipv te moeten werken met de 'AT' commando's. In de bibliotheek zit namelijk een complete MQTT client.
Ik raad mensen dan ook aan om ook even 'NanoESP' in te toesten op google voordat ze met het board aan de gang gaan.
Groeten,
Ton.
Nic Geron 7 jaar geleden
Een heel mooie reeks artikelen, geeft een hoop ideeen voor IoT toepassingen thuis, en, belangrijk: met betaalbare nodes!
Ik ben ook bezig met het Pretzel board uit de Franzis IOT Maker Kit. In programma 10 uit het boekje was ik niet snel genoeg met intikken van de commando's om de http code van www.example.com op te vragen. Steeds verscheen na enige tijd 'CLOSED' in het venster van mijn terminal, waarmee de ESP aangeeft dat de TCP/IP verbinding verbroken wordt.
Toen ben ik gaan rondkijken op de site van ESP, naar documentatie van de AT commando's.
Op https://www.espressif.com/en/support/download/documents vind je een heel veel documentatie, o.a. ESP8266 AT Instruction Set.
Daarin wordt het CIPSTART commando beschreven met als extra parameter:
[,<TCP keep alive]. Volgens de beschrijving daar, staat deze parameter default op disabled (0), maar kan met 1 .. 7200 het detectie time interval in sec. aangegeven worden. De oplossing voor het sluiten van de connectie!
Maar, elke keer als ik die extra parameter wilde toevoegen aan het AT+CIPSTART=.... commando, kreeg ik een ERROR. Toen dus met AT+CIPSTART=? de actuele parameters voor dit commando, zoals in de firmware van de PRETZEL - 8266 opgevraagd, en daar bleek de extra parameter niet bij te staan.
Daarna met AT+GMR de 'AT' versie, 'SDK' versie en compile time opgevraagd, waaruit bleek dat het de ESP op het PRETZEL board een oudere firmware versie heeft.
Esspressif beschrijft ook hoe de ESP8266 geflashed kan worden, maar, zo ver ben ik nog niet. Als iemand hier ervaring mee heeft, hoor ik dat graag!
Groeten,
Nic