This project aims to make the development of IoT devices by makers easy as pi!
No longer will makers have to fiddle around with getting Bluetooth or WiFi to work, nor will they have to delve into the depth of web development to make a good looking web interface.
This project simplifies all of that, with a series of development board, all based off the ESP32. These boards will seamlessly connect to a master board, based off a Raspberry Pi, and will be ready for hacking!
After a fair bit of troubleshooting, I now have a major part of this project complete:
The ESP32 can now be programmed remotely from a web interface
I'm still working on the UI, but for now it's okay:
At the top is a code editor, with full syntax highlighting. Shown is a simple example of a capacitive touch sensor program for the ESP32
Once code has been written, the Upload button triggers the compilation of code to include a lightweight web server, connects to the ESP32 via WebREPL and transfers all the required files.
To test the code, the page also has a testing area where the user can pass in any values that the function requires, and get an output from the ESP32:
There are a few UI changes that need making to tidy things up a bit, and at the moment it struggles a bit knowing they type of any values a user gives in the test area, but I'm very happy with the progress that's being made
One thing that must be good for a successful IoT system is it's user interface. For OneIoT, I have chosen the google assistant.
The google assistant will sit on the central raspberry pi, listening out for the phrase 'OK Google'. When it hears this, it will be able to trigger a user defined action on any connected ESP32 device, or respond as the Google assistant normally would, for example, to answer a question that it is given.
I'll shortly be putting out instructions on how to install the assistant and manage the phrases that it responds to.
With a breakout assembled, I now have to install Micropython.
There's a great set of instruction here, but I found I needed to take some additional steps.
Below, I will outline what worked for me. I was working on Ubuntu with Python 3 installed.
FTDI Breakout Board
3v3 Power Supply
Wire up the ESP32 as shown in the following diagram The 3v3 and GND connections power the board The EN connection controls resetting the board The GPIO0 and GPIO2 connections set the board in 'DOWNLOAD_BOOT' mode
Today the ESP32 arrived, and I was surprised by how small it was! I was both pleasantly surprised by the small form factor, as well as horrified of what soldering I had ahead of me...
The ESP32 has 38 pads surrounding it, on 3 sides. It is far from breadboard friendly!
To make it more breadboard compatible, I created this breakout board:
It breaks out all 37 (One is NC) pads into a breadboard friendly format. The breakout sits nicely on a breadboard, and the top header can be used with female to male jumper cables.
This was by far the most fiddly bit of making I have done in a long time! I started by hot gluing the ESP32 to the centre of the board, then, with the headers seated in a breadboard I began the painful process of connecting each pad to it's corresponding pin.
Whilst it's not the neatest thing in the world, it works. Each pad is connected to a pin that plugs into a breadboard.
There are many languages that could be chosen for this project. It could be programmed in C, the Arduino variation of C etc...
However for this project, I chose MicroPython. The reason being that one of the main aims of this project is to make IoT easily accessible to makers, just as the Raspberry Pi made computing accessible and Arduino made microcontrollers accessible.
MicroPython is super simple to write, and is very powerful. Also, MicroPython is available on the ESP32, the microcontroller I have chosen to use for this project.
Quick update on that ESP32 I ordered - It hasn't arrived yet 😔, I assume the postal service has been really busy over the Easter weekend
I thought it would be good to start by outlining the main aims of this project. That way I can have a clear objective of what I'm working towards.
This project can be summarised into 3 aims:
Create a network of devices that can communicate with each other
Allow each device to interact with the outside world
Have one, central, managing device that receives data and sends instructions to the other devices
In terms of specific details of how the devices will connect, or what the devices will do to interact with the outside world, I have yet to decide. I want to approach this project with no preconceptions of what IoT means, and how it can be implemented.