Introduction: ESP-01 ADC Extra Pin Connect With NodeMCU Server OLED Display

ESP-01 ADC Extra Pin connect with NodeMCU Server OLED Display

Extra Pin on ESP-01

  • GPIO 0 and 2 are already exist.
  • GPIO 4, 5 and ADC are extra and will show you home to make it here

ESP-01 Parts :

  • (1) ESP8266 - ESP01
  • (2) Button
  • (1) 3.3v converter
  • (1) Light Sensor with 1KOhm

NodeMCU Parts:

  • (1) 0.9 OLED
  • (2) LED
  • (2) 220Ohm

Tester :

  • (6) LED
  • (6) 220 Ohm

Home Make soldering iron head show as photo above.

Some steady hands and a small iron could tap it. So, i made it, it small.

Warning : make sure connect deep-sleep mode pin before silk it PIN 8 (XPD-DCDC)

But i forget it !!! So, i can not test deep sleep function

Ref : http://www.bntdumas.com/2015/07/23/how-to-battery-...

More Detail : www.imediabank.com

Step 1: Connect Together

Connect all Together

Step 2: Test ESP-01 Extra ADC PIN

Test Extra

Test GPIO 0, 2, 4, 15

<p>for i=0, 6, 1 do <br>     gpio.mode(i, gpio.OUTPUT)
end</p><p>for i = 0, 6, 1 do
     print(i)
     gpio.write(i, gpio.HIGH)
     print("HIGH")
     tmr.delay(1000000);
     gpio.write(i, gpio.LOW)
     print("LOW")
     tmr.delay(1000000);
end</p>

Test ADC Pin

This example is connect a light sensor with 220Ohm.

<p>-- in you init.lua:<br>if adc.force_init_mode(adc.INIT_VDD33)
then
  node.restart()
  return -- don't bother continuing, the restart is scheduled
end</p><p>for i=0,10 do
     print("System voltage (mV):", adc.readvdd33(0))
     tmr.delay(1000000)
end</p>

Result

<p>System voltage (mV):	635<br>System voltage (mV):	685
System voltage (mV):	637
System voltage (mV):	574
System voltage (mV):	0
System voltage (mV):	0
System voltage (mV):	209
System voltage (mV):	213
System voltage (mV):	616
System voltage (mV):	672
System voltage (mV):	673</p>


Now you can do anything analog read by esp01

Step 3: Test Client / Server With OLED Display

The following test is to send analog signal by ESP-01 ADC Extra Pin to NodeMCU and show on OLED

Test Client / Server with OLED Display

Client LUA

<p>function initADC()    <br>    if adc.force_init_mode(adc.INIT_VDD33) then
        node.restart()
        return -- don't bother continuing, the restart is scheduled
    end
    
    --for i=0,10 do
    --    print("System voltage (mV):", adc.readvdd33(0))
    --    tmr.delay(1000000)
    --end
end    </p><p>wifiUp = function()
  wifi.setmode(wifi.STATION)
  wifi.sta.config(conf.wifi.ssid, conf.wifi.pwd)
  wifi.sta.connect()
end</p><p>setPin = function()
    gpio.mode(0, gpio.INPUT)
end</p><p>check = function()
  gpio.mode(2, gpio.OUTPUT)
  ip = wifi.sta.getip()
  if ip ~= nil then
    print(ip)
    gpio.write(2, gpio.HIGH)
  end
end</p><p>--tempStatus = function()
--  status,temp,humi,temp_decimial,humi_decimial = dht.read11(conf.pins.temp)
--  t = {
--    plain = temp,
--    hash  = crypto.toHex(crypto.hmac("md5", tostring(temp), conf.secret))
--  }
--  return cjson.encode(t)
--end</p><p>function urlEncode( str )
   if ( str ) then
      str = string.gsub( str, "\n", "\r\n" )
      str = string.gsub( str, "([^%w ])",
         function (c) return string.format( "%%%02X", string.byte(c) ) end )
      str = string.gsub( str, " ", "+" )
   end
   return str
end</p><p>readSensor = function()
    return adc.readvdd33(0)
end</p><p>b = true
ctr = 0</p><p>payload = function( code )
  --local t = tempStatus()
  --print(b)
  urlstr = ""
  if (b == true) then
     b = false
     urlstr = "GET /?pin=ON1&" .. 
                    "sensor=" .. readSensor() .. "&" .. 
                    -- "name=" .. urlEncode("Sanki Poon") .. "&" ..
                    "value=" .. tmr.now() .. "&" ..
                    "ctr=" .. ctr .. 
                    " HTTP/1.1\r\nHost: " .. conf.server.ip .. "\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n";
     
     --return urlstr;
     --return "GET /?pin=ON1&abc=101&name=Sanki%20Poon HTTP/1.1\r\nHost: 192.168.0.102\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n";
  else
     b = true
     --return "GET /?pin=OFF1 HTTP/1.1\r\nHost: 192.168.0.105\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n";
     urlstr = "GET /?pin=OFF1&" .. 
                    "sensor=" .. readSensor() .. "&" .. 
                    -- "name=" .. urlEncode("Sanki Poon") .. "&" ..
                    "value=" .. tmr.now() .. "&" ..
                    "ctr=" .. ctr .. 
                    " HTTP/1.1\r\nHost: " .. conf.server.ip .. "\r\nConnection: keep-alive\r\nAccept: */*\r\n\r\n";
     
  end
  ctr = ctr + 1;
  return urlstr;</p><p>--  return "POST /proxy HTTP/1.1\r\n"
--    .. "Host: localhost\r\n"
--    .. "User-Agent: foo/7.43.0\r\n"
--    .. "Accept: */*\r\n"
--    .. "Content-Type: application/json\r\n"
--    .. "Content-Length: " .. string.len(t) .. "\r\n\r\n"
--    .. t
end</p><p>sendData = function()
  sk = net.createConnection(net.TCP, 0)</p><p>  retStr = payload(1)</p><p>  sk:on("connection", function()
    --sk:send(payload(1))
    sk:send(retStr)
  end)</p><p>  sk:on("sent", function()
    sk:close()
  end)</p><p>  sk:connect(conf.server.port, conf.server.ip)
  print("Sending..." .. retStr)
end</p><p>conf = {
  wifi   = { ssid='SweetHome', pwd='<Password>' },
  pins   = { board=3, temp=6 },
  server = { port=80, ip='192.168.0.105' },
  secret = "secret",
}</p><p>wifiUp()
setPin()</p><p>tmr.alarm(0, 1000, 0, initADC)
tmr.alarm(0, 4000, 0, check)
tmr.alarm(1, 2000, 1, sendData)</p>

NodeMCU Server LUA

 
<p>-- setup SPI and connect display<br>function init_spi_display()
    -- Hardware SPI CLK  = GPIO14
    -- Hardware SPI MOSI = GPIO13
    -- Hardware SPI MISO = GPIO12 (not used)
    -- CS, D/C, and RES can be assigned freely to available GPIOs
    local cs  = 8 -- GPIO15, pull-down 10k to GND
    local dc  = 4 -- GPIO2
    local res = 0 -- GPIO16</p><p>    spi.setup(1, spi.MASTER, spi.CPOL_LOW, spi.CPHA_LOW, 8, 8)
    disp = u8g.ssd1306_128x64_hw_spi(cs, dc, res)
end</p><p>-- graphic test components
function prepare()
    disp:setFont(u8g.font_6x10)
    disp:setFontRefHeightExtendedText()
    disp:setDefaultForegroundColor()
    disp:setFontPosTop()
end</p><p>--init_i2c_display()
init_spi_display()
--disp:firstPage()</p><p>function showOLED(sensor, ctr)
  disp:firstPage()
  repeat
    prepare()
    -- SANKI
    --disp:setScale2x2()
    --
    -- LINE ~ +9
    --
    disp:drawStr(36, 3, wifi.sta.getconfig())
    
    disp:drawStr(0, 15, "IP : " .. wifi.sta.getip())
    disp:drawStr(0, 24, "Mac:" .. wifi.sta.getmac())
    
    
    if (wifi.ap.getip() ~= nil) then
        disp:drawStr(0, 33, "AP : ")
        disp:drawStr(30,32, wifi.ap.getip())
    end
    if (ctr ~= nil) then
        disp:drawStr(0, 42, "PWM: " .. sensor)
        disp:drawStr(0, 51, "Ctr: " .. ctr)
    end
    --disp:undoScale()
 until disp:nextPage() == false
end</p><p>wifi.setmode(wifi.STATION)
wifi.sta.config("SweetHome","<Password>")</p><p>led1 = 2 
led2 = 3
gpio.mode(led1, gpio.OUTPUT)
gpio.mode(led2, gpio.OUTPUT)
srv=net.createServer(net.TCP)
srv:listen(80,function(conn)
    conn:on("receive", function(client,request)
        local buf = "";
        local _, _, method, path, vars = string.find(request, "([A-Z]+) (.+)?(.+) HTTP");
        if(method == nil)then
            _, _, method, path = string.find(request, "([A-Z]+) (.+) HTTP");
        end
        local _GET = {}
        if (vars ~= nil)then
            for k, v in string.gmatch(vars, "(%w+)=(%w+)&*") do
                _GET[k] = v
            end
        end
        buf = buf.."
</p> ESP8266 Web Server<p>";
        buf = buf.."
</p><p>GPIO0 ON OFF</p><p>";
        buf = buf.."
</p><p>GPIO2 ON OFF</p><p>";
        local _on,_off = "",""
        if(_GET.pin == "ON1")then
              gpio.write(led1, gpio.HIGH);
        elseif(_GET.pin == "OFF1")then
              gpio.write(led1, gpio.LOW);
        elseif(_GET.pin == "ON2")then
              gpio.write(led2, gpio.HIGH);
        elseif(_GET.pin == "OFF2")then
              gpio.write(led2, gpio.LOW);
        end
        print(".......  Start ............")
        print(_GET.pin);
        print(_GET.sensor);
        print(_GET.value);
        --str = "Counter : " .. _GET.ctr;
        print(_GET.ctr);
        showOLED(_GET.sensor, _GET.ctr);
        print("......... END ..........");
        client:send(buf);
        client:close();
        collectgarbage();
    end)
end)</p><p>print(wifi.sta.getip())</p>
<br>