Robo India presents tutorial on how to run LCD on ESP8266 using LUA programming.
1. Introduction:
This tutorial explains how to use LCD for displaying purpose on ESP8266 using LUA programming. We are using 16×2 character LCD in this tutorial. This tutorial has got LUA file you can include that file in your existing project to use LCD.
You need to have basic understanding of ESP8266, below mentioned tutorials of Robo India may help you out in this.
1. This tutorial explains configuration and setup of ESP8266
2. This tutorial explains basic of ESPlorer.
2. Circuit
The basic setup of ESP should be done along with basic setup make the following circuit.
We are using I2C LCD backpack here in this tutorial. Mount 16×2 LCD to the I2C LCD backpack.
3. Programming
Before moving ahead to the programming you must know the i2c device no of the LCD Backpack, here is a tutorial of Robo India for I2C scanning.
once you know i2c address of LCD download the following file lcd.lua open the same and enter address of i2c on line no. 7th. In our case our i2c address is 0X3F.
You may download lcd.lua from here.
local M do local id = 0 local sda = 3 -- GPIO0 local scl = 4 -- GPIO2 local dev = 0x3F -- I2C Address local reg = 0x00 -- write i2c.setup(id, sda, scl, i2c.SLOW) local bl = 0x08 -- 0x08 = back light on local function send(data) local value = {} for i = 1, #data do table.insert(value, data[i] + bl + 0x04 + rs) table.insert(value, data[i] + bl + rs) -- fall edge to write end i2c.start(id) i2c.address(id, dev ,i2c.TRANSMITTER) i2c.write(id, reg, value) i2c.stop(id) end if (rs == nil) then -- init rs = 0 send({0x30}) tmr.delay(4100) send({0x30}) tmr.delay(100) send({0x30}) send({0x20, 0x20, 0x80}) -- 4 bit, 2 line send({0x00, 0x10}) -- display clear send({0x00, 0xc0}) -- display on end local function cursor(op) local oldrs=rs rs=0 if (op == 1) then send({0x00, 0xe0}) -- cursor on else send({0x00, 0xc0}) -- cursor off end rs=oldrs end local function cls() local oldrs=rs rs=0 send({0x00, 0x10}) rs=oldrs end local function home() local oldrs=rs rs =0 send({0x00, 0x20}) rs=oldrs end local function lcdprint (str,line,col) if (type(str) =="number") then str = tostring(str) end rs = 0 --move cursor if (line == 2) then send({0xc0,bit.lshift(col,4)}) elseif (line==1) then send({0x80,bit.lshift(col,4)}) end rs = 1 for i = 1, #str do local char = string.byte(string.sub(str, i, i)) send ({ bit.clear(char,0,1,2,3),bit.lshift(bit.clear(char,4,5,6,7),4)}) end end M={ lcdprint=lcdprint, cls = cls, home=home, cursor=cursor, } end return M
4. Calling the function:
The lcd.lua file has got following functions.
4.1 General Functions:
1. For clearing screen –
dofile(“lcd.lua”).cls();
2. Set cursor at Column 0 and Row 0
dofile(“lcd.lua”).home();
3. To show cursor
dofile(“lcd.lua”).cursor(1);
4. to hide cursor
dofile(“lcd.lua”).cursor(0);
4.2 Printing functions:
dofile(“lcd.lua”).lcdprint(“String”,Row,Column);
Rows can be 1 and 2. Columns can be 0 to 15.
example – dofile(“lcd.lua”).lcdprint(“Hello World!”,0,0);
4.3 How to run these functions:
Just copy and paste these functions to ESPlorer or any other interfacing software with ESP8266 and you will see the result on LCD screen.
If you have any query please write us at support@roboindia.com
Thanks and Regards
Content Development Team
Robo India
http://roboindia.com