Arduino & ESP8266 Webserver

This is a very old guide and things have moved on a lot since this was written. One of the main advances is the ESP8266 core for the Arduino IDE. This means the ESP8266 can now be programmed like an Arduino and this is how I use them now, no more messing around with AT commands. For a general overview and examples of using the ESP8266 with the Arduino core see ESP8266 and the Arduino IDE.

Here is my first attempt at a web server using the ESP8266. It includes a request count and also a text input field.

ESP8266 webpage

Enter your name and hit submit

ESP8266 webpage 2

Continue reading

FTDI + ESP8266

Just started to play with the ESP8266-01 modules. Purchased from Taobao.
These, I believe, are version 2 and have the LEDs near the antenna. When first started they identify themselves as [ Version:] and are version 018000902-AI03. This is a custom firmware from ai-thinker.

There seems to be quite a few different versions of similar modules. And the same module could have one of several firmwares.

Continue reading

Arduino with HC-05 (ZS-040) Bluetooth module – AT MODE

Update 20.07.2017

The zs-040 breakout boards are now being used for many different modules and you may not have the exact same boards as those shown below. The modules I am using here use the EGBT-045MS Bluetooth module and have the HC/Wavesen 2.0-20100601 firmware. They also have an EN pin rather than a KEY pin and they have a small button switch just above the EN pin.

There are now newer zs-050 modules that use the real HC SMD modules, these have a newer firmware and include a blue LED at the top right of the SMD daughter board.

There are also modules that use the same breakout board but have different board markings such as the fc-114 modules:
HC-05 FC-114 and HC-06 FC-114. First Look
HC-05 FC-114 and HC-06 FC-114. Part 2 – Basic AT commands
HC-05 FC-114 and HC-06 FC-114. Part 3 – Master Mode and Auto Connect


AT Command Mode

AT command mode allows you to interrogate the Bluetooth module and to change some of the settings; things like the name, the baud rate, whether or not it operates in slave mode or master mode.
When used as a master device AT commands allow you to connect to other Bluetooth slave devices.

The HC/Wavesen 2.0-20100601 firmware has different AT modes:
A full mode at 38400 baud.
A partial mode at 38400 baud.
A partial mode at the user settable baud rate.
A partial mini mode (even less commands work) at the user settable baud rate.

Most commands work when in any AT command mode but there are some commands that only work when pin34 is HIGH. This fooled me for quite a while. I now believe the partial/mini AT command mode is a bug in the firmware and I now only recommend using the full 38400 baud rate AT command mode.

HC-05 zs-040

To activate AT mode on the HC-05 zs-040 modules pin 34 needs to be HIGH on power up. The small push button switch connects pin 34 to +3.3v so we can either:
– connect pin 34 directly to +3v3v and power on, or
– hold the button switch closed when starting the module.

Please be aware that for the full AT command mode, pin 34 has to be HIGH all the time and we cannot do this with just the button switch. When in AT command mode with pin 34 not HIGH (LOW or floating) some commands will not work and so, when using the button switch, you need to press and hold it closed when sending some commands.

Using the button switch to enter AT command mode using 38400 baud rate:
– 1. remove power from the module
– 2. Hold the small button switch closed while powering on the module.
– 3. Press and hold the button switch.
– 4. While still holding the button switch closed, apply power.
– 5. When you see the LED come on you can release the button switch.

Enters AT mode with the built in AT mode baud rate of 38400. The baud rate cannot be changed by the user.
This method allows the module to enter AT mode on start but but does not keep pin 34 HIGH and some commands will not work.

Alternatively, if you are using AT command mode for any length of time, make a direct connection between pin 34 and +3.3v. Either solder a wire to the pin or use a clip.

Using pin 34 to enter full AT command mode using 38400 baud rate.
– 1. Remove power from the module
– 2. Make a connection between pin 34 and +3.3v
– 3. Reapply power.

Enters AT mode with the built in AT mode baud rate of 38400. The baud rate cannot be changed by the user.
If you keep pin 34 HIGH you will enable the “full” AT mode which allows all AT commands to be used.
If you let pin 34 return LOW after power on then “mini” AT mode will be enabled.

Continue reading

Turning a LED on and off with an Arduino, Bluetooth and Android. Part II: 2 way control

In the first part I showed how to control a single LED from an app created in App Inventor. This worked OK but was very limited. You could control only 1 LED and the control was one way; from the app to the Arduino. What if you want to have 2 way control of the LED and to be able to also control the LED from the Arduino side? What if you want to control more than 1 LED?

In this guide we look at adding two-way communication. Here we control an LED but you could have it doing anything.

Arduino-AI2-Bluetooth_1LED_01In first example you could only control the LED from the Android app, here we extend the example so that we can also control the LED at the Arduino side. When the LED is turned on or off by the Arduino we want the button in the app to update to show the correct LED status.

The first example used methods only suitable for controlling one LED, this time we will try to make it so the Arduino sketch and also the AI2 app can be easily scaled and so once you have the basic app in place adding extra buttons and controls should be fairly straight forward.

Continue reading

Arduino / ATmega 328P fuse settings

Part of programming stand-alone ATmega chips is setting the fuse bytes, these are special settings that can be used to change how the ATmega chips operate.

Some of the things you can do by changing the value of the fuses include;

  • select different clock sources and change how fast the chip runs,
  • set the minimum voltage required before the chip works.
  • set whether or not a boot loader is used,
  • set how much memory is allocated to the boot loader,
  • disable reset.
  • disable serial programming
  • stop eeprom data being erased when uploading a new sketch.

There are many articles online but I could not find a single source that brought all the information together and fully explain what the fuses actually do.

It is important to remember that some of the fuse bits can be used to lock certain aspects of the chip and can potentially brick it (make it unusable). However, with a bit of care it is fairly straight forward to understand and use the fuse settings.

Disclaimer, I am relatively new to programming fuses and these are notes I wrote to help me remember things. The information is based on the data sheet for the ATmega chip, internet searches, and questions I asked on forums (especially the Arduino forum).

Continue reading

Controlling a Solenoid Valve from an Arduino

Using the Arduino to control the solenoid valve is simply a case of setting a pin high for the appropriate amount of time. There is, however, a caveat, the solenoid works at a different voltage to the Arduino and you cannot directly connect the two. In this case a TIP120 transistor is used as a bridge.


The TIP120 allows a small dc voltage (from the Arduino) to switch a larger dc voltage (12V to the solenoid). It can be thought of as a switch, applying a current to  B allows current to flow between C to E.

Continue reading