Skip to content
Peter F. Jorgensen edited this page Mar 28, 2016 · 57 revisions

This wiki contains a description of my "ImFine" project, which I have submitted to the "World’s Largest Arduino Maker Challenge" competition run on the Hackster.io maker site.

Button

The competition is sponsored by Arduino, Microsoft, Adafruit, Atmel and Hackster.io.

Thank you for setting up this competition.

A note to the reader about the current state of the project:

The project is not finished as I ran out of time doing the project before the competition deadline, but I have a really stable platform for an Arduino device to use the Azure IoTHub for transferring messages back and forth.

Adding the missing application functionality on top of this platform is something I look forward to do.

I'm sure that this documentation is missing a lot of stuff (I know it is), so please be gentle with me.

Although the project is not finished, it has reached a level to be used as a good stable platform to expand on. What I have now can be reused in many different applications.

The following lists the functionality currently in good shape.

  1. The device can connect to WiFi and Azure IoTHub. It uses SSL to connect to Azure IoTHub using Http REST Api and SAS tokens
  2. The device sends and receives messages to Azure IoTHub and also deletes read messages from the IoTHub
  3. The device use an interrupt service routine to detect button pressed from a digital IO pin
  4. The device controls an LED and a piezo buzzer using digital IO pins.
  5. The buzzer is activated by commands received from the IoTHub.
  6. The device reads temperature and humidity from a DHT22 sensor and periodically sends data to the Azure IoTHub
  7. The IoTHub backend application is implemented as a C# console application and runs as a Azure WebJob in the cloud
  8. The IoTHub backend application communicates with the service side of the IoTHub and receives feedback from the IoTHub on the success of sending data to the device
  9. The backend application stores data in a Azure SQL server database. Currently all messages sent and received are stored in a single table in the database.
  10. The backend application implements a datamodel on top of the SQL database, using Entity Framework 6. Currently the datamodel is very simple and only has one entity for messages
  11. The backend implements an Email class to send emails using any email provider. I have set up a dedicated Google Gmail account and use this to send emails. For testing I can enable that an email is sent to a receiver when the IoTHub receives a message from a device.