ESP-8266 Serial to Web interface / IOT adapter

Many devices provide some form of serial interface. Routers, Robots (e.g. Roomba), 3D printers, or motion controllers for e.g. CNC (like the BOB Motion) have a standard serial port.* Using an ESP-8266, a simple to use, very low cost connection between those devices and the internet can be made.

On startup, the web connection unit loads a saved configuration which it uses to try to connect to a local router via WiFi. The default setup looks for a common public wifi provider, but it's unlikely that will connect. If the unit can't connect, and the config allows "admin mode", it presents it's own WiFi SSID, which includes the password and IP address, making the initial setup as easy as possible. Connecting to the device with a cell phone and hitting the default IP provides web forms (shown below) to enter your own routers SSID, password, and other network settings. Once the unit is connected to the router, it's IP address is available via the admin connection, or with a tool like Fing, or on the debug serial interface.

Part of the standard setup is the "Stream Server" which parcels out large text files one line at a time... or several lines at a time, e.g.
http://techref.massmind.org/techref/getline.asp?line=1&lines=100
to the connected device. This avoids the need for the local device to have or rely on large amounts of local memory while still allowing it to process very long complex sequences of instructions e.g. When the connected device is a 3D printer, or CNC mill, etc... The programming required to make this work on the server has, so far, been by far the most difficult issue. The basic server scripts and SQL procedures for importing text files into table for rapid random line access aren't that hard, but providing access, without opening security holes, has proven nearly impossible. We hope to provide documentation for easily spinning up a google cloud engine so users can provide this function for themselves.

On startup, all ESP-8266 devices send out a string of data about version, etc... at a strange baud rate, 76,4884. There is no way to disable this. That data could easily confuse or damage the device connected to the web interface unit. To avoid this problem, we use the second serial pins available on larger ESP units like the 7 or 12 or 12E, commonly available for under $5. The standard Serial library uses UART0, which is mapped to pins GPIO1 (TX) and GPIO3 (RX). Serial may be remapped to GPIO15 (TX) and GPIO13 (RX) by calling Serial.swap() after Serial.begin. Of course, level conversion is necessary on those pins for TTL or RS232 connections. Calling swap again maps UART0 back to GPIO1 and GPIO3. Use Serial.flush() to block until serial sending is finished before swapping. A slight delay after the flush also helps to ensure everything is done. This allows standard debug and programming connections while still providing clean serial IO with the connected device.
https://github.com/esp8266/Arduino/blob/master/doc/reference.md#serial

Once you (via the web) and the device (via the 2nd serial port) are connected to the unit, sending data to the device is as simple as typing in the form presented when you connect to the ESP and pressing enter. Responses are shown back in the browser window.

If no browser is connected, the unit can log any data received from the device to the stream server, buffering a limited amount of data from the device if the server isn't accessible.

* Also vending machines, medical equipment, cell phone towers, etc...

See also: