In the earlier post MKR1000 Azure IoT Hub Interface using HTTP, I wrote about how to get the MKR1000 ready for Azure IoT Hub and start receiving data from Azure IoT. You might have noticed the following when running the sketch in the earlier post: After using the Device Explorer to send a single message, the MKR1000 would have blinked its LED after the first receive. If you continue to let the sketch run with out sending any new message, after about 60 seconds you will notice that MKR1000 receiving the same message and blinking again. This is due to the way a message’s life cycle works on the Azure IoT Hub. In this post I will address how the devices should send any one of Complete/Reject/Abandon message back to the Azure IoT Hub so that the message is not replayed again. This is essential if you are to interface with Azure IoT Hub correctly with HTTP.
After getting my hands on the pre-release version of the MKR1000 as part of the Worlds Largest Arduino Maker Challenge yesterday, I was trying to get it running with the Azure IoT Hub. This guide lays out some of the things that I learned that might help out others out there trying to get their projects running with Azure IoT.
This guide doesn’t use AMQP or MQTT. This uses the simple HTTP interfaces available for Azure IoT Hub. This assumes that you have already signed up for the Azure IoT Hub and created it. This guide will walk you through the following steps to get you going.
Ever since I saw these LED Candles I wanted to pick them up and connect them to a WiFi enabled micro controller to make an IoT LED Candle. Recently while browsing through the local Walmart I noticed one of these with the “Try Me” button. I had no choice but to pick it up and get my IoT itch over with. In the end it was pretty straight forward with the help of the awesome Adafruit IO.
Look for “Additional Board Managers” field and enter <code>http://arduino.esp8266.com/stable/package_esp8266com_index.json</code>
Open Tools>Boards>Board Manager
Choose “esp8266 by Esp8266 Community” and install. Its about 160 MB install.
After Installation these are the boards I could see in Boards menu under ESP8266:
You should now be able to connect your NodeMCU to the PC and verify. Be aware of two things:
a) You might have to install the Silicon Labs CP210x Serial Driver if you can not see any COM Port listed on the Ardunio> Tools> Ports menu
b) It might a silly thing. But make sure you use the right USB cable. There are too many USB cables in my toolbox. Once in my ignorance about USB cables I used a power only USB charging cable (one that has only the two wires for power connected and no data wires) and struggled a while on COM port not appearing.
Once the Port appears in the Arduino IDE menu, choose the right board. In my case its NodeMCU 0.9 board.
Choose File>Examples>ESP8266>Blink sketch. Press Upload. The blue led on the ESP8266 should blink rapidly indicating communication status. Once sketch is successfully uploaded I could see the on board red LED connected to GPIO 16 blink (D0 on the board).. Pin out below.
Now that my Arduino IDE is setup to be used for NodeMCU programming, time to explore further.
I was surprised to learn that AMQP protocol is not supported on Universal Windows Platform with Azure Devices Client libraries.I was getting this message “Amqp protocol is not supported” when trying to connect to the Microsoft Azure IoT Hub through the UWA app. This applies to MQTT as well. Only thing that’s supported right now is HTTP.
The nuget package Microsoft.Azure.Devices.Client lists both AMQP and MQTT libraries as dependencies. But its not supported on the Universal Windows platform. Weird.
This threw “Amqp protocol is not supported” :
__thisClient = DeviceClient.Create(__azureIoTHubHostname,
new DeviceAuthenticationWithRegistrySymmetricKey(__azureIoTHubDeviceId, __azureIoTHubDeviceKey));
Had to update the line to include the TransportType.HTTP1 parameter:
__thisClient = DeviceClient.Create(__azureIoTHubHostname,
new DeviceAuthenticationWithRegistrySymmetricKey(__azureIoTHubDeviceId, __azureIoTHubDeviceKey),
While trying to make a XBox 360 driver work with Raspberry pi, I ended up installing a wrong driver with devcon. When trying to remove the driver, kept getting the message that the driver is in use even though the usb device was unplugged. So had to force remove by using -f switch.
I had a MPR121 in my tool box. After getting my Raspberry Pi 2 installed with Windows IoT Core, I wanted to get this MPR121 Capacitive touch break out board working with it. While Adafruit had a library for Arduino, there wasn’t an MPR121 Driver for Windows IoT Core readily available. So I wrote this Windows.IoT.Core.HWInterfaces.MPR121 library in C# that can be used with the Raspberry Pi. In addition to the sample app available in the Github repo, I also created a Touch sensitive Christmas tree using this library. This post describes a few things about the MPR121 library.
Had a load of fun getting my Raspberry PI 2 set up with Windows IoT core and the whole development environment that’s needed for it.
Windows 10 and Visual Studio
Can’t develop for Windows IoT core without Windows 10. So had to set up Windows 10 on Mid 2011 Mac. The problem was my Mac already had Debian Linux running on a separate partition. I used the wonderful rEFInd boot manager from Rod Smith earlier to do the partitioning and it came in handy to add the third partition for windows 10. Had some quirky troubles with the Apple Wireless mouse and keyboard but i have a wired keyboard/mouse connected to the Mac just in case. So now my mac has two keyboards and two mouse.. 🙂 One day i need to get around to fixing the problem permanently. After getting Windows 10 on the Mac, installing VS 2015 was a breeze.