本帖最后由 如三月兮 于 2017-6-1 17:01 编辑
这篇帖子我就和大家讲一下,如何使用小e开发板实现我们的项目——基于小e开发板的火灾报警系统。其实思路也很简单,要想实现这个项目,肯定要让小e开发板接入云平台,利用云平台强大的数据处理能力,来实现我们想要的功能。其实现在云平台有很多,比如开发快、onenet、氦氪云等等,大家可以选择适合自己的云平台,这里我选择的是贝壳物联,因为小e开发板连接贝壳物联十分的简单方便,而且贝壳物联能够通过绘制曲线,直观表征传感器采集到的数据,更重要的是它提供了报警提示功能,正是我们这个项目所需要的。
下面我就简单的介绍一下项目完成的过程
第一步、添加设备和数据接口
在这里我就不具体演示如何在贝壳物联云平台上添加设备和数据接口的过程啦,大家可以参考一下这里。
第二步、编写代码
先贴出来init.lua里面的代码
- --wifi station configured
- print("set up wifi mode")
- wifi.setmode(wifi.STATION)
- wifi.sta.config("xxx","xxxxxx")--这里改成自己的wifi名称和密码
- --here SSID and PassWord should be modified according your wireless router
- wifi.sta.connect()
- --connect
- tmr.alARM(1, 1000, 1, function()
- if wifi.sta.getip() == nil then
- print("IP unavaiable, Waiting...")
- else
- tmr.stop(1)
- print("Config done, IP is "..wifi.sta.getip())
- dofile("bigio.lua")
- end
- end)
复制代码
其实也很简单,就是连接上自家的wifi,然后执行bigio.lua文件,这里文件里面的代码才是重点,下面贴出来
- DEVICEID = "xxxx" --改成自己的设备ID
- APIKEY = "xxxx" --改成自己的APIKEY
- INPUTID1 = "2103" --改成自己数据接口ID
- INPUTID2 = "2104" --改成自己数据接口ID
- INPUTID3 = "2256" --改成自己数据接口ID
- host=host or "www.bigiot.net"
- port=port or 8181
- cu = net.createConnection(net.TCP)
- cu:connect(port, host)
- ok, s = pcall(cjson.encode, {M="checkin",ID=DEVICEID,K=APIKEY})
- if ok then
- print(s)
- else
- print("failed to encode!")
- end
- cu:send(s.."n" )
- --keeping the on-line state
- tmr.alarm(1, 60000, 1, function()
- cu:send(s.."n" )
- end)
- --update the data and output
- function Init_oled(sda,scl,sla)
- i2c.setup(0, sda, scl, i2c.SLOW)
- disp = u8g.ssd1306_128x64_i2c(sla)
- disp:setFont(u8g.font_7x13B)
- disp:setFontRefHeightExtendedText()
- disp:setDefaultForegroundColor()
- disp:setFontPosTop()
- end
- print('MQ-2 and DHT11 Demo')
- MQ2_pin=0
- DHT11_pin=1
- gpio.mode(MQ2_pin, gpio.INPUT)
- gpio.mode(DHT11_pin, gpio.INPUT)
- Init_oled(4,5,0x3c)
- status, temp, humi, temp_dec, humi_dec = dht.read(DHT11_pin)
- function display()
- disp:firstPage()
- local heap = tostring(node.heap())
- repeat
- disp:drawStr(30,20, temp)
- disp:drawStr(50,20,humi)
- disp:drawStr(30,40,adc.read(MQ2_pin))
- until disp:nextPage() == false
-
- end
- MQ2_pin=0
- DHT11_pin=1
- tmr.alarm(2, 1000, 1, function()
- status, temp, humi, temp_dec, humi_dec = dht.read(DHT11_pin)
- if status == dht.OK then
- display()
- print("MQ-2(mV):"..adc.read(MQ2_pin)..";".."DHT Temperature:"..temp..";".."Humidity:"..humi.."%")
- elseif status == dht.ERROR_CHECKSUM then
- print( "DHT Checksum error." )
- elseif status == dht.ERROR_TIMEOUT then
- print( "DHT timed out." )
- end
- --uploading command
- str="{"M":"update","ID":""..DEVICEID.."","V":{""..INPUTID1.."":"..temp..",""..INPUTID2.."":"..humi..",""..INPUTID3.."":"..adc.read(MQ2_pin).."}}n"
- cu:send(str)
- end)
复制代码
需要改动的部分我已经标注出来了,连接贝壳物联和上传数据的部分我是参照着官方给的demo改的,也不是每一句都懂,也没用那个必要,我们只要能改成适合我们自己用的就可以了
上传代码之后,如果一切正常的话,应该是这个样子的
我添加了一个邮箱报警器,为了测试,将报警限值设为600,这样一旦云端接收到数据就会给我发邮件了
这是 手机上接收到的提醒
这是云端采集到的数据绘制成的曲线图
|