Each Feather HUZZAH ESP8266 breakout comes pre-programmed with NodeMCU's Lua interpreter. As of this writing, we ship with NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4 but it may be more recent
Lua is still a work in progress, so we strongly recommend visiting NodeMCU and updating your Lua version to the very latest as they have the ability to make you the latest continuous build. Then follow their guide on how to update Lua!
The Lua interpreter runs on the ESP8266 and you can type in commands and read out the results over serial. In order to upload code to the ESP8266 and use the serial console, connect any data-capable micro USB cable to the Feather HUZZAH and the other side to your computer's USB port. Install the required CP2104 USB driver to have the COM/Serial port appear properly
Don't forget to visit esp8266.com for the latest and greatest in ESP8266 news, software and gossip!
Open up serial console
Next up, on your computer, use a serial console program such as CoolTerm (Mac) or Putty (Windows) or screen (linux). Teraterm seems to dislike the initial 74400bps data stream from the ESP8266 so you can try it but you'll possibly need to reset the terminal software.
- Connect up to the COM or Serial port used by your cable, at 9600 Baud (if an issue, try 115200 baud)
- Make sure you have turned off any hardware handshake or flow control
- Putty isn't good with pasting code in, so you may not be able to copy-n-paste!
-
Also make sure you have line endings set to CRLF "\r\n"
Use any serial console program you like, we just happen to be used to Putty!
Once the terminal software is connected, click the Reset button on the Feather HUZZAH ESP8266 board to reset it and have it print out the welcome message:
If you don't get this message, first check that the red/blue leds flickered when you press the reset button. If they didn't, make sure you've got the right baud rate selected in the software (9600 or 115200)
Pin Notes |
PCB/Arduino |
NodeMCU/Lua |
No pullups! |
0 |
3 |
2 |
4 |
|
CHPD (Note, don't use this pin or set it to be an output!) |
3 |
9 |
4 |
1 |
|
5 |
2 |
|
9 |
11 |
|
10 |
12 |
|
12 |
6 |
|
13 |
7 |
|
14 |
5 |
|
15 |
8 |
|
16 |
0 |
So to set the pin #0 LED on and off (which would be pin #3 in Lua) first make it an output:
gpio.mode(3, gpio.OUTPUT)
Turn the LED on with:
gpio.write(3, gpio.LOW)
And off with:
gpio.write(3, gpio.HIGH)
You can make this a little more automated by running a longer script.
For longer text, pasting can be difficult as the lua interpreter needs a little delay time between characters and also require CR-LF settings. For that reason you may want to paste each line and then hit return manually.
while 1 do gpio.write(3, gpio.HIGH) tmr.delay(1000000) -- wait 1,000,000 us = 1 second gpio.write(3, gpio.LOW) tmr.delay(1000000) -- wait 1,000,000 us = 1 second end
The LED will now be blinking on and off.
Note that since its in a loop, its not possible to get it to stop via the interpreter. To stop it, click the Reset button again!
This code halts the processor during the tmr.delay, a smarter way to blink an LED is to use the timer capability to set off the LED control (code from here)
-- Pin definition local pin = 3 local status = gpio.LOW local duration = 1000 -- 1 second duration for timer -- Initialising pin gpio.mode(pin, gpio.OUTPUT) gpio.write(pin, status) -- Create an interval tmr.alarm(0, duration, 1, function () if status == gpio.LOW then status = gpio.HIGH else status = gpio.LOW end gpio.write(pin, status) end)
Scanning & Connecting to WiFi
We'll continue with a quick demo of scanning for WiFi and connecting.
Once you're back at the Lua prompt, set the ESP8266 into WiFi Client mode with
wifi.setmode(wifi.STATION)
Then you can run the scanner and have it print out the available AP's
-- print ap list function listap(t) for k,v in pairs(t) do print(k.." : "..v) end end wifi.sta.getap(listap)
or for more detail...
-- print ap list function listap(t) for ssid,v in pairs(t) do authmode, rssi, bssid, channel = string.match(v, "(%d),(-?%d+),(%x%x:%x%x:%x%x:%x%x:%x%x:%x%x),(%d+)") print(ssid,authmode,rssi,bssid,channel) end end wifi.sta.getap(listap)
We can connect to the access point with wifi.sta.config and wifi.sta.connect - it will take a second or two to complete the connection, you can query the module to ask the status with wifi.sta.status() - when you get a 5 it means the connection is completed and DHCP successful
wifi.sta.config("accesspointname","yourpassword") wifi.sta.connect() tmr.delay(1000000) -- wait 1,000,000 us = 1 second print(wifi.sta.status()) print(wifi.sta.getip())
WebClient example
Once you're got the IP address you can connect to adafruit, for example, and read a webpage and print it out:
sk=net.createConnection(net.TCP, 0) sk:on("receive", function(sck, c) print(c) end ) sk:connect(80,"207.58.139.247") sk:send("GET /testwifi/index.html HTTP/1.1\r\nHost: www.adafruit.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
You can also have the module do DNS for you, just give it the hostname instead of IP address:
sk=net.createConnection(net.TCP, 0) sk:on("receive", function(sck, c) print(c) end ) sk:connect(80,"www.adafruit.com") sk:send("GET /testwifi/index.html HTTP/1.1\r\nHost: www.adafruit.com\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n")
This is just a light overview of testing out your HUZZAH ESP breakout! For much more, check out NodeMCU's documentation page https://nodemcu.readthedocs.io/ for the details on what functions are available to you, as well as http://www.lua.org to learn more about the Lua scripting language
Page last edited April 23, 2024
Text editor powered by tinymce.