六、ESP8266LUA开发之建立TCP客户端,实现ADC测量,单点接地的小知识

8266ADC测电压

init.lua

gpio.mode(4,gpio.OUTPUT)
gpio.mode(2,gpio.OUTPUT)
gpio.write(4,1)

if  adc.force_init_mode(adc.INIT_ADC) then
    node.restart()
    return
end

tmr.alarm(0, 1000, 1, function()
    gpio.write(4,1-gpio.read(4))
end)

tmr.alarm(1, 3000, 0, function()
    dofile("wifi.lua")
end)

wifi.lua

wifi.setmode(wifi.STATIONAP)

cfg={}
cfg.ssid="Hellow8266"
cfg.pwd="11223344"
wifi.ap.config(cfg)

apcfg={}
apcfg.ssid="qqqqq"
apcfg.pwd="11223344"
wifi.sta.config(apcfg)
wifi.sta.autoconnect(1)

ClientConnectedFlage = 0
TcpConnect = nil
tmr.alarm(1, 1000, 1, function()

    if  ClientConnectedFlage == 0 then
        Client = net.createConnection(net.TCP, 0) 
        Client:connect(8080,"192.168.1.103")

        Client:on("receive", function(Client, data) 
            uart.write(0,data)
            ReadAd(data)
        end)

        Client:on("connection", function(sck, c) 
            ClientConnectedFlage = 1
            TcpConnect = Client
            print("Link OK")
            tmr.stop(1)

            Client:on("disconnection", function(sck, c) 
                ClientConnectedFlage = 0
                TcpConnect = nil
                tmr.start(1)
            end)
        end)

        if  ClientConnectedFlage == 0 then
            print("Link Error")
        end
    end
end)


function ReadAd(data)
    if  data == "++MD9" then
        ad = adc.read(0)
        if  TcpConnect ~= nil then
            TcpConnect:send("++MDAD="..ad)
        end
    end
end



uart.on("data",0,function(data) 
    if  TcpConnect ~= nil then
        TcpConnect:send(data)
    end
end, 0)


printip = 0
wifi.eventmon.register(wifi.eventmon.STA_DISCONNECTED, function(T)
    printip = 0
end)


wifi.eventmon.register(wifi.eventmon.STA_GOT_IP, function(T)
   if printip == 0 then
      print("+IP"..T.IP)
   end
   printip = 1
end)

ADC对应引脚

这里写图片描述

对应板子的位置引脚
这里写图片描述

命令以及回复这样规定

这里写图片描述

API文档说明

这里写图片描述

adc.INIT_ADC - 引脚输入
adc.INIT_VDD33 - 测内部

我们使用的是引脚输入,然后readadc(0) 就行。

init.lua里面加入

if  adc.force_init_mode(adc.INIT_ADC) then
    node.restart() --重启生效
    return
end

然后wifi.lua中加入

function ReadAD(data) 
    if data=="++MD9" then
        if TcpClient~=nil then
            ad = adc.read(0)
            TcpClient:send(ad)
        end
    end
end

并在Client:on("receive", function(Client, data)事件监听中进行函数的调用。

对了测试的电压是0-1V ,分辨率是 1024

当悬空的时候,数据是飘忽的,正常现象。
这里写图片描述

当接到3V3上面的时候,传回来的数据是1024
这里写图片描述

接到GND的时候的数据
这里写图片描述

竟然是14,竟然不是0,相关具体解释可参考<这里>

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ReCclay/article/details/81844012