Adafruit Huzzah input from button

After the last project:

Adafruit Huzzah WiFi

I wanted to have the device take input from a switch (which also came in the Starter kit).

Based on my existing projects I now created a configuration of:

image

Pin 4 = Red LED + Resistor (560 ohm)

Pin 5 = Green LED + resistor (560 ohm)

Pin 2 = button

Each of these lines then went to the GND pin.

For the code I found the following article which was a great help:

https://create.arduino.cc/projecthub/muhammad-aqib/arduino-button-tutorial-using-arduino-digitalread-function-08adb5

from which I adapted my own code at:

https://github.com/directorcia/Azure/blob/master/Iot/huzzah-button.c

So that when the button is pressed it swaps which LED is on like so:

ledclick

Of course, it could be improved but I am still calling it a success as all I really wanted to do was incorporate input from an external source.

With all this now done, the next aim is to work out how to connect the device to Azure and get Azure capturing the input from the device and reporting it somehow.

Adafruit Huzzah Wifi

My last IoT challenge was to get an

External flashing LED

working and the next was to get the Adafruit Huzzah with ESP8266 to connect to Wifi. To do that I found most the required code here:

https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/using-arduino-ide#connecting-via-wifi

and I’ve put my code on my Github here:

https://github.com/directorcia/Azure/blob/master/Iot/huzzah-wifi.c

You’ll need to put in your own WiFi access point details at the top of the code to connect to your own environment.

This script uses a lot of commands like:

serial.println

which basically outputs text to a serial port. This allows much easier troubleshooting so you can see what is going on. To see this output you will however need a dedicated serial monitor console program. I started off using Putty:

https://putty.org/

which works great but upon reflection, I wanted to use something that was integrated directly into Visual Studio code. After some poking around I found this extension:

https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-serial-monitor

which is from Microsoft and seems to do what I needed.

image

You can see the output from my code above in serial monitor. Always ensure you match the output port and baud rate in the serial monitor to the device you have (here COM3 and 115200). Configuring this is very easy with the serial monitor extension.

Without much alteration, I was able to take the initial code and easily connect to my network as well as the Internet. Once connected I could ping the Adafruit Huzzah with ESP8266 from another PC in the network. A pretty painless exercise. Nice that things are becoming a little easier now I’m becoming familiar with this stuff.

So far, all I’ve done is use the Adafruit Huzzah with ESP8266 for output. Next, I’ll be to start taking simple input into the device by reading something like a button press and then taking action on that.

Stay tuned for details on that soon.

External flashing LED

My first IoT project was to get the on board LED flashing which I achieved here:

Not as easy as IoT

With that accomplished, I now wanted to get an external LED flashing.

I firstly needed to pick a pin on the Adafruit device to control the output on.

image

I chose the third in from the bottom on the right which is PIN 2.

Next, I needed to work out the maximum output voltage for the Adafruit Feather Huzzah, which turns out to be 3.3 Volts. I also noted the following from the pin output specifications as well:

“be aware the maximum current drawn per pin is 12mA. 6mA recommended”

I also needed to take into account the voltage drop that would occur across the LED, which is around 0.7V. So the voltage for my calculation was now:

3.3V – 0.7V = 2.3V

To work out what resistor I needed to place in the circuit I used the good ole V= IR.

V=IR

R = V/I

R = 2.3 / 0.006

R = 433 ohms

I double checked my logic at:

http://www.anycalculator.com/ohmslaw.htm

I then went through the:

Microsoft Azure IoT Starter Kit w/ Adafruit Feather HUZZAH

I had bought to see what resistors were included. In there I found a 560 ohm resistor. If you need to check your resistor markings like I did, you can use:

https://byjus.com/physics/resistor-colour-codes/

to help discern what you have.

A 560 ohm resistor would means my current would be:

I = V / R

I = 2.3 / 560

I = 4.1 milliamps (well below the 6 milliamp recommendation)

All I needed now was to find the ground for the Adafruit

image

which turned out to be the fourth pin from the top on the left.

I therefore wired up the output from pin 2 on the Adafruit, through the LED, through the resistor and then to ground, completing the circuit.

Now for the code to make it flash.

#include <Arduino.h>

int LED_Pin = 2;

int status = 1;

void setup(){

pinMode(LED_Pin, OUTPUT);

}

void loop() {

  // put your main code here, to run repeatedly:

if (status) {

digitalWrite(LED_Pin, HIGH);

  } else {

digitalWrite(LED_Pin, LOW);

  }

status = 1-status;

delay (1000);

}

which is basically the same as before, except the LED_pin now is set to 2. The code is at:

https://github.com/directorcia/Azure/blob/master/Iot/huzzah-ext-flash-led.c

Using PlatformIO IDE I uploaded my code to the Adafruit and after a few minutes was greeted by:

iot-flash

Magic eh?

Sure it’s simple but it’s another step along my IoT journey.

Not as easy is IoT

I wanted to start playing with IoT and connecting it up to Azure after being inspired by some previous guests on my podcast (Bryn Lewis and Lars Klint). I did a search for something like ‘Azure IoT starter kit’ and the following popped up:

Microsoft Azure IoT Starter Kit w/ Adafruit Feather HUZZAH

Microsoft Azure IoT Starter Kit w/ Adafruit Feather HUZZAH

So I ordered it. I was looking forward to getting back to my Electrical Engineering roots with this IoT stuff.

A few weeks later (it did take quite a while to arrive) I opened the kit to see what was inside. To my dismay, there wasn’t very much in the ways of instructions. Yes, all the parts where there, but nothing to tell me how to make it all work.

The kit provider did have the following tutorial available:

https://learn.adafruit.com/adafruit-feather-huzzah-esp8266/overview

but it didn’t show me how to actually get my code into the device. That then lead me to the

Arduino IDE

but there wasn’t a lot of positive feedback on it and really wanted to use something I was more familiar with. Luckily, I had a contact who had done some basic IoT and told me I could user Visual Studio Code! Yes please. I like that because I use with with PowerShell nearly everyday.

What I needed to do after firing up Visual Studio code was to search and install an extension called Platformio IDE:

https://docs.platformio.org/en/latest/integration/ide/vscode.html#quick-start

image

It popped right up so I pressed the install button.

Unfortunately, the installation came up with some errors, but I was kind of expecting that because I was installing on a machine that was connected to my Azure AD and locked down with things like Windows ASR. Thus, after many, many attempts at trying to get the installation working and then create a project I moved to using a machine that was NOT connected to my Azure AD and locked down to the hilt. The installation then went smoothly unsurprisingly.

image

With PlatformIO IDE installed I went to create a Project.

image

I used the above settings. Warning, the platform supports a huge range of boards (1400+) so ensure you know the exact model of your board and be prepared to scroll.

With the project created I now needed to write some code to get the built in light on the board to flash. I used the following:

#include <Arduino.h>

int LED_Pin = 0;

int status = 1;

void setup(){

pinMode(LED_Pin, OUTPUT);

}

void loop() {

  // put your main code here, to run repeatedly:

if (status) {

digitalWrite(LED_Pin, HIGH);

  } else {

digitalWrite(LED_Pin, LOW);

  }

status = 1-status;

delay (1000);

}

Which I found after some searching. I have put the code up on GitHub if you want it:

https://github.com/directorcia/Azure/blob/master/Iot/huzzah-flash-led.c

I managed to get that code to compile but it would then not ‘upload’ to the device.

After more searching I discovered that PlatformIO wasn’t showing me any devices like so:

image

If PlatformIO can’t see my device, then it can’t upload to it.

After more searching around I found the following Windows drivers for the board here:

https://learn.adafruit.com/adafruit-arduino-ide-setup/windows-driver-installation

Typically, it seems you shouldn’t really need to manually install drivers on Windows 10/11, but in my case, I did.

With the drivers now installed I could see the board listed as a device in PlatformIO like so:

image

With the drivers now sorted, I could finally upload my code to the device successfully.

The code I found that would flash the light on the device on and off as the most basic test didn’t seem to do anything after it was uploaded. The trick was that the code I found had the LED_Pin = 13 and luckily, after that didn’t work I guessed correctly setting it to LED_Pin = 0 would as you can see from the code above that I actually used.

image

After, uploading the updated code to the device I was then rewarded with a flashing light at the base of the device near the USB connection as shown above. I know it doesn’t look like much but to me it was a huge step after all the time I had invested getting things set up (many hours).

Now that I have the basics working, my next project is to get the WIFI connectivity on device working so I can connect it up to the Internet and then hopefully Azure eventually.

I do have to say that getting this far has been far harder than I imagined it would be. I didn’t find a lot of information out there to help solve my problems. That’s why I’m documenting my results here so that others can find it and hopefully not have to go through the same pain I did.

I’m sure there’ll be more pain coming as I try and do more advanced things with the device but at least getting the light flashing gives me the encouragement to continue with this endeavour and not feel that I wasted my money. I’ll share more in time as I continue my IoT journey, but for now, I need a lie down.

Need to Know podcast–Episode 284

In this episode I speak with MVP Bryn Lewis about IoT and what services like Azure has available to help with these projects. If you are a ‘make’ or just want to get your hands dirty with some hardware, then this is the episode for you.

I’ll also bring you up to date with all the latest news from the Microsoft Cloud.

Take a listen and let us know what you think – feedback@needtoknow.cloud

You can listen directly to this episode at:

https://ciaops.podbean.com/e/episode-284-bryn-lewis/

Subscribe via iTunes at:

https://itunes.apple.com/au/podcast/ciaops-need-to-know-podcasts/id406891445?mt=2

The podcast is also available on Stitcher at:

http://www.stitcher.com/podcast/ciaops/need-to-know-podcast?refid=stpr

Don’t forget to give the show a rating as well as send me any feedback or suggestions you may have for the show.

This episode was recorded using Microsoft Teams and produced with Camtasia 2021.

Brought to you by www.ciaopspatron.com

Resources

Bryn Lewis – Github, Blog, Twitter

IoT for beginners

Microsoft IoT Blog

Hobbyist gear – Sparkfun, Adafruit

Hobbyist and Commercial gear – Tindie, Seeed Studio, Microelektonica

Low Power wireless – Things network, Dragino, RAKWireless

Machine Learning on the Edge – Edge impluse, ML.NET

RTOS – Azure, free RTOS

.NET on the edge – nanoframework, GHI

OneDrive limit change

New security solutions to help secure SMB

Revamped Office.com

What’s new in Endpoint Manager

Do more with OneNote