In het vorige deel van de serie heb ik voor het eerst een werkende IoT-besturing gebouwd. Die werkte op basis van mijn in C# geprogrammeerde MQTT-client. We kunnen die clients starten op twee PC’s waar ook ter wereld en over en weer berichten sturen, die worden doorgegeven via een MQTT-testserver in de cloud. Ik had de client uitgebreid, zodat hij de ontvangen berichten automatisch doorgeeft via een instelbare (virtuele) COM-poort. Toen moest ik nog een kaart aansluiten, die de commando’s kon interpreteren en iets kon aansturen, bij voorkeur draadloos. Dat heb ik opgelost met een Atmel SAM -D20-kaart, een uitbreidingskaart met relais en een set draadloze stopcontacten uit de bouwmarkt. Zo kon ik de lamp in mijn studeerkamer in- en uitschakelen (zie deel 5).

Maar een PC als invoerapparaat voor de commando’s is bepaald wat onhandig; daarom wilde ik mijn Android-smartphone (Galaxy S6) aan dit systeem koppelen. Ik had dus een appje nodig, waarmee ik de berichten voor het schakelen van het relais kon genereren. Het leek me het eenvoudigste om de commando’s gewoon via TCP /IP naar een PC in hetzelfde WLAN-netwerk als het mobieltje te sturen. Want code voor het verzenden van TCP /IP-berichten met Android/Java en voor het ontvangen met C# is op het Internet wel te vinden. Bovendien zou ik die routines dan altijd weer in allerhande toekomstige Elektor-projecten kunnen gebruiken.

Zo gezegd, zo gedaan: Ik breidde mijn MQTT-client uit met functionaliteit om te luisteren naar binnenkomende TCP /IP-berichten en die via MQTT door te sturen (de links voor het downloaden van de broncode en het exe-bestand zijn onderaan dit artikel te vinden). De bediening is eenvoudig: Voer eerst een MQTT-topic, zoals bijvoorbeeld „Lamp“ in, waaronder de berichten gepubliceerd moeten worden (zie deel 4). Het is het handigste om u ook meteen op dat topic te abonneren, zodat u een terugmelding krijgt en kunt zien dat de berichten daadwerkelijk via MQTT zijn verzonden. Geef dan het IP-adres van de computer in het huisnetwerk in, bijvoorbeeld „192.168.0.10“ (een tool zoals de netwerkscanner van SoftPerfect kan hierbij goed van pas komen). Klik tenslotte op de button „ TCP listen“. U kunt nu ook een instantie van de MQTT-client starten op een computer ergens anders, waar u eigen elektronica aan koppelt. Of probeer alles eerst eens uit met één enkele PC. Voer in de MQTT-client ook nog in op welke COM-poort de SAM -kaart, de Arduino of de andere hardware is aangesloten.

Nu had ik nog een app nodig om de TCP /IP-berichten te verzenden. Mijn kennis over het programmeren voor Android was wat roestig geworden, omdat ik dat lang niet had gedaan en ik om te beginnen ook nog „Android Studio“ op mijn nieuwe laptop moest gaan installeren. En opnieuw kon ik vaststellen dat deze IDE gevorderde Android-ontwikkelaars verwent met een krachtig, goed beveiligd systeem. Maar voor beginners is het toch wel even doorbijten. Met geduld, sterke zenuwen en de bereidheid om veel tijd te besteden aan het leren is het allemaal wel te doen. Voor wie niet rechtstreeks wil programmeren in Android/Java zijn er verschillende manieren om toch aan een besturings-app op de smartphone te komen. We gaan daar in Elektor en ook in deze serie nog vaker op terugkomen.

Mijn appje verzendt TCP /IP-berichten naar een vrij te kiezen IP-adres in het huisnetwerk. Zowel het bericht als het adres kunnen worden ingevoerd in een tekstvak. Druk daarna op de „Send“-button. Vanwege tijdgebrek heb ik geen menu met instellingen en ook geen timeout-functie geïmplementeerd. Als de PC de berichten niet ontvangt, omdat de TCP -listener op de MQTT-client nog niet is gestart of omdat de adressen niet kloppen, blijft de zaak hangen. Maar dit is voldoende voor een eerste demo, en misschien kunt u de code ook gebruiken voor een eigen besturing van het één of ander op de PC.

Nu kon ik dan eindelijk commando’s zoals „R 0 1 +“, „R 0 1 –“ versturen vanuit mijn smartphone en zo mijn draadloze stopcontact bedienen. Natuurlijk is het niet erg comfortabel om tekstberichten in te moeten tikken. En we hebben ook wel erg veel hardware gebruikt. Dat kunnen we vast en zeker nog optimaliseren!