The micro:bit has a radio that works in Bluetooth LE and point-to-point ad-hoc mode, but at the moment it lacks WiFi connectivity. The solution is to use the low cost ESP8266 to make the connection via the micro:bit’s serial port. This is an advanced chapter from Harry Fairhead’s latest book, mico:bit IoT in C.
As we will make a lot of use of the micro:bit’s serial port it is assumed that you know roughly how it works. In particular, it is assumed that you are familiar with the material in the previous chapter. Before we get on to the details of using the ESP8266 we need to find out what makes it special.
The Amazing ESP8266
The ESP8266 is a very odd and amazing device. It is remarkably low cost, $5 or less, but it is a full microprocessor with GPIO lines, RAM and built in WiFi. It is built by a Chinese company Espressif Systems but there are a number of copies on the market. The proliferation of devices and software revisions makes it difficult to work with, but it is well worth the effort.
While you can set up a development system yourself and program the ESP8266 to do almost anything, it comes with built-in software that allows it to be used as a WiFi module for other processors. This is how we are going to use it to give the micro:bit a WiFi capability.
The ESP8266 connects to the micro:bit using the serial port. The micro:bit controls it and transfers data using a system of AT commands. These were commonly used to control modems and other communication equipment and they still are used in mobile phone modems.
The module that is used in this chapter is the ESP-01 which is widely available from many different sources but they all look like the photo:
There is another version, the ESP-07, which comes with a screen RF stage and other advantages and this should also work.
A bigger problem is that there are new versions of the firmware and some of these might not work in exactly the same way. However it should be easy to make the changes necessary.
Connecting the ESP8266 ESP-01
There a number of minor problems in using the ESP8266. The first is that it comes with an eight-pin male connector which is not prototype board friendly.
The best solution to this is to use some jumper cables – female to male – to connect it to the prototype board or use female-to-female cables to connect directly to the micro:bit breakout board.
A second problem is caused by the fact that the device is powered from a 3.3V supply. This might tempt you to try to power it from the micro:bit’s 3.3V supply.
This will not work.
The ESP8266 takes a lot of current, 300mA or so, when transmitting. The micro:bit cannot supply this much current. You need to use a separate 3.3V power supply. Of course you can use this to power both the ESP8266 and the micro:bit and in some situations this would be an advantage.
You can use one of the many low cost prototyping board power supplies with no problems:
The pin out of the ESP-01 is usually shown from the component side, but in fact the pins that you want to connect to are on the other side. To make things easier the two views are given in the diagram:
The pin functions are:
1 Ground – connect to ground
2 TXO – the serial tx pin
3 GPIO2 – ignore
4 CHPD – chip enable connect to 3.3V
5 GPIO0 – ignore
6 RST – reset leave unconnected
7 RXI – the serial rx pin
8 VDD – Supply voltage connect to 3.3V
From the pinouts you should be able to work out the way the ESP8266 has to be connected to the micro:bit. If we use P0 as Tx from the micro:bit and P1 as Rx to the micro:bit we have to connect ESP-01 pin 7 to P0, pin 2 to P1 and ESP-01 pins 8 and 4 to the external power supply. To make it all work we also have to connect ESP-01 pin 1 to the ground of the external power supply ground and to the ground of the micro:bit, as shown:
The key idea in using the ESP8266 is that the micro:bit has to send an AT command, literally the characters AT, followed by other command strings. The command has to end with rn for the ESP8266 to take notice of it.
You can find a fill list of commands at the Espressif web site, but the most important are:
AT – Attention
AT+RST – Reset the board
AT+GMR – Firmware version
AT+CWMODE* – Operating Mode 1. Client 2. Access Point 3. Client and Access Point
AT+CWJAP=, – Join network
AT+CWLAP – View available networks
AT+CWQAP – Disconnect from network
AT+CIPSTATUS – Show current status as socket client or server
AT+CIPSTART=,, – Connect to socket server
AT+CIPCLOSE – Close socket connection
AT+CIFSR – Show assigned IP address when connected to network
AT+CIPMUX= – Set connection 0. Single Connection 1. Multi-Channel Connection
AT+CIPSERVER=Open the Socket Server
AT+CIPMODE= – Set transparent mode
AT+CIPSTO= – Set auto socket client disconnect timeout from 1-28800s
This is just a very general overview and omits the commands that allow the device to work as an access point. It is assumed that client mode is the more common application, but it isn’t difficult to extend this example to access point operation.