日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

Modemcu上传 mysql_nodemcu 连接domoticz上传自定义的传感器采集交流电压

發布時間:2024/3/26 数据库 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Modemcu上传 mysql_nodemcu 连接domoticz上传自定义的传感器采集交流电压 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

首先準備一下的東西:1、一個nodemcu。2、一個domoticz,可以自己搭建一個,樹莓派或者vps等等。3、一個交流電壓傳感器,220v輸入,輸出5v以內的交流信號。

實現方式,用nodemcu的ADC采集交流傳感器的模擬量,每ms讀取一個值,一共讀取500個值存儲在數組中。采用最大值,經過比例換算出220V交流對應的電壓,自己要有一個萬用表用來調測。在domoticz中添加一個虛擬的電壓傳感器

虛擬傳感器.jpg

led1 = 4

stat=1

blink=2000

gpio.mode(led1, gpio.OUTPUT)

gpio.write(led1, gpio.HIGH);

local parameter1,parameter2,parameter3,parameter4,parameter5=nil,nil,nil,nil,nil

print('Setting up WIFI...')

wifi.setmode(wifi.STATIONAP )

wifi.sta.autoconnect(1)

tmr.alarm(1, 2000, tmr.ALARM_AUTO, function()

if wifi.sta.getip() == nil then

print('Waiting for IP ...')

else

print('IP is ' .. wifi.sta.getip())

tmr.stop(1)

end

end)

tmr.alarm(4,blink, tmr.ALARM_AUTO, function()

gpio.write(led1, gpio.LOW);

tmr.delay(1000)

gpio.write(led1, gpio.HIGH);

end)

function stringgsub(data)

--分割參數

aa=string.find(data,",")

ss=string.find(data,",",aa+1)

parameter1=string.sub(data,1,aa-1)

parameter2=string.sub(data,aa+1,ss-1)

parameter3=string.sub(data,ss+1,-1)

return parameter1,parameter2,parameter3

end

if adc.force_init_mode(adc.INIT_ADC)

then

node.restart()

return -- don't bother continuing, the restart is scheduled

end

val={}

i=1

--a=0

vall=0

max=0

tmr.alarm(2, 1, tmr.ALARM_AUTO, function()--每毫秒采集數據一次500個

val[i] = adc.read(0)

i=i+1

if i>500 then

i=0

tmr.stop(2)

end

end)

tmr.alarm(3,2000, tmr.ALARM_AUTO, function()--每兩秒采集一次抽取最大的數據

for j=1,500 do

if val[j]~=nil then

if max < val[j] then

max=val[j]

end

end

end

print("adc is:"..max)

AC=(max-765)*1.06--比例換算

print("ADC voltage (V):"..AC)

local testjson={}

testjson={key=AC,curr="30",temp="38"}

local ok, json = pcall(sjson.encode,testjson)

if ok then

print(json)

else

print("failed to encode!")

end

max=0

tmr.start(2)

end)

---------------send AV voltage to domoticz

tmr.alarm(5, 15000, tmr.ALARM_AUTO,function()

conn=net.createConnection(net.TCP, 0)

conn:connect(8080,"xxxx。com")

conn:on("receive", function(conn, payload)

print("The result is"..payload)

end )

conn:on("connection", function(conn, payload)

local get1="/json.htm?type=command&param=udevice&idx=7&nvalue=0&svalue="..AC--idx也要寫自己傳感器的編碼我的是7

http.get("http://xxx自己domoticz服務器地址"..get1, "Authorization: Basic 這里寫自己的用戶名密碼base64編碼", function(code, data)

if (code < 0) then

print("HTTP request failed")

else

print(code, data)

end

end)

print("The AC voltage is send:"..AC)

if blink~=5000 then

blink=5000

tmr.unregister(4)

tmr.register(4,blink,tmr.ALARM_AUTO,function()

gpio.write(led1, gpio.LOW);

tmr.delay(3000)

gpio.write(led1, gpio.HIGH);end)

tmr.start(4)

end

end

)

end)

udpSocket = net.createUDPSocket() ---設置nodemcu-esp8266需要連接wifi網絡

---通過UDP連接ESP開頭的AP,向端口5000發送命令,命令格式:“AP,wifi名字,wifi密碼”中間用英文逗號隔開。

udpSocket:listen(5000)

udpSocket:on("receive", function(s, data, port, ip)

local parameter1,parameter2,parameter3=stringgsub(data)

if blink~=500 then

blink=500

tmr.unregister(4)

tmr.register(4,blink,tmr.ALARM_AUTO,function()

gpio.write(led1, gpio.LOW);

tmr.delay(1000)

gpio.write(led1, gpio.HIGH);end)

tmr.start(4)

end

if parameter1 == "AP" then

print(string.format("APP: %s:%d",ip, port))

--IP AND PORT 是發送端的

print("ap is:"..parameter2.."pass is:"..parameter3.."reconnected")

station_cfg={}

station_cfg.ssid=parameter2

station_cfg.pwd=parameter3

wifi.sta.config(station_cfg)

s:send(port,ip,"Will be reconnecting,wait a moument.")

end

end)

修改wifi的連接SSID,需要在手機下載一個網絡調試軟件,比如有人網絡助手,或者Socket X。都可以默認連接的IP是192.168.4.1。端口是5000

源碼傳到nodemcu ,只需修改自己的domoticz的一些數據就可以用了。

不懂的可以問我。

最后上圖:

電壓.jpg

歷史數據.jpg

總結

以上是生活随笔為你收集整理的Modemcu上传 mysql_nodemcu 连接domoticz上传自定义的传感器采集交流电压的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。