爱科技、爱创意、爱折腾、爱极致,我们都是技术控
您需要 登录 才可以下载或查看,没有账号?立即注册
x
基于Arduino NANO 和 8266项目实现框架 其中8266也采用Arduino进行编程主要工作为: 1.连接贝壳物联网站 2.保持设备在线 3.将NANO串口送来的数据进行转发 NANO部分nano部分需要完成的工作比较简单,主要就是通过analogic函数读出引脚的模拟电压值,然后保存。同时负责PM2.5模块的驱动工作。这里有一篇CSDN的范文讲的很不错,贴出原帖地址: 读出以上数据后,我们需要将这个数据封包成一个我没所确定的格式来进行与8266的通信。这里我自定义了一种数据格式如:!data,形如这种格式。我们在接收到数据后即可通过检测!与,来进行中间段的字符串的截取工作 。同时NANO也需要负责驱动一块OLED显示器实时的显示本地的数值。这里采用了0.96inch OLED显示屏。通过IIC总线和NANO进行数据通信。调用的是u8g2库。在此之中我们也很不幸的遇到了一个很令人迷惑的事情。不知道是由于u8g2库中变量过多的原因还是什么。竟然提示动态内存占用了83%。非常罕见值得一提。还有一个就是可能买的NANO开发板质量不行。下载容易受到干扰。这时候需要重新插拔。并且不能接别的外围器件才能下载成功。烧录的时候需选用(old bootloader)这一选项。在此备注以防忘记。 8266部分8266没有采用常规的AT模式,因为我觉得8266本来的性能就很强悍。只把它当作一个wifi网卡莫名的有点大材小用。而且把wifi联网部分和传感器部分分离开有助于增强代码的可读性。同时也有利于培养模块化编程的思想。开头调用wifimanager库来实现网页配置连接wifi的功能。之后负责TCP连接贝壳物联客户端并保持设备在线。然后的部分就是数据处理部分。 由于我们所定义的数据格式是形如这种:!45,!32,!56,。所以我们只需检测出所有!和,的位置并以此切割即可得到字符串。代码如下: int datStart1 = 0, datEnd1 = 0,datStart2 = 0, datEnd2 = 0,datStart3 = 0, datEnd3 = 0;
String datstr1,datstr2,datstr3;
datStart1 = comdata.indexOf("!");
datEnd1 = comdata.indexOf(",", datStart1);
datstr1 = comdata.substring(datStart1+1, datEnd1);
mq_2 = datstr1.toInt();
datStart2 = comdata.indexOf("!",datStart1+1);
datEnd2 = comdata.indexOf(",", datEnd1+1);
datstr2 = comdata.substring(datStart2+1, datEnd2);
mq_135 = datstr2.toInt();
datStart3 = comdata.indexOf("!",datStart2+1);
datEnd3 = comdata.indexOf(",", datEnd2+1);
datstr3 = comdata.substring(datStart3+1, datEnd3);
pm2_5 = datstr3.toInt();之后我们就得到了由NANO采集的数据。我们所需要的就是将其上传至bigiot。这边采用了贝壳物联的update函数接口。方便网页读取数据。由于还需配套开发手机APP来检测数据。所以我们还需要一个向手机客户端发送数据的部分。说到这我就很迷惑了。原本打算是通过把获得的数据封装成json格式的字符串进行发送。再在手机APP开发中用Json.prase就可以很方便的解析出我们所需要的。但是这网站貌似对content内容为json格式的字符串不兼容。调试了很久都连接不上。最后只能简单的封装成“12-52-12”这种格式然后在app中通过split以“-”为分隔符进行分割。导致有点多此一举的感觉。其实在这里是推荐传输数据尽量使用json格式的字符串的。因为这样代码可移植性会得到大大的增强。 APP部分APP部分比较简单,采用了HXBUILER开发软件。将一个HTML网页封装为APP。负责登录并接收数据就可以。需要一丢丢JS基础。自己对着教程看看就懂了。直接贴上代码。 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title></title>
<script src="js/mui.min.js"></script>
<link href="css/mui.min.css" rel="stylesheet"/>
<script type="text/javascript" charset="utf-8">
mui.init();
</script>
</head>
<body>
<!-- <button id="btn1" type="button">打开</button>
<button id="btn2" type="button">关闭</button> -->
<br>
<div align="center">
<label id="lb1">连接结果</label>
</div>
<br>
<br>
<label id="text1">MQ_2: </label>
<label id="lb_2">0</label>
<br>
<br>
<label id="text2">MQ_135: </label>
<label id="lb_135">0</label>
<br>
<br>
<label id="text3">PM2.5: </label>
<label id="lb_25">0</label>
<br>
<br>
<br>
<br>
<script type="text/javascript">
var storage = window.localStorage;
var ws = new WebSocket("ws://www.bigiot.net:8383");
var lb = document.getElementById("lb1");
var lb_2 = document.getElementById("lb_2");
var lb_135 = document.getElementById("lb_135");
var lb_25 = document.getElementById("lb_25");
var a=storage.sw1;
ws.onopen = function()
{
lb.innerText = "连接中。。。"
};
ws.onmessage = function (evt)
{
var received_msg = evt.data;
var obj = JSON.parse(received_msg);
if(obj.C != undefined)
{
var envir = obj.C;
var strs = new Array();
strs = envir.split("-");
lb_2.innerText = strs[0];
lb_135.innerText = strs[1];
lb_25.innerText = strs[2];
}
if(obj.M == "WELCOME TO BIGIOT")
{
ws.send('{"M":"checkin","ID":"17295","K":"0c7e4e0af"}')
lb.innerText = "连接成功"
}
if(obj.M == "ping")
{
ws.send('{"M":"checkin","ID":"17295","K":"0c7e4e0af"}')
}
};
</script>
</body>
</html>系统的联合调试将8266通过串口于NANO连接,配置好互联网。通电,打开手机APP观察数据变化。其中8266成功启动后。灯会变成蓝色。实物图如下: 正常情况下: 打火机释放可燃气体: 手机APP截图: 配网检测界面: 引脚接线和后话开发8266物联网这一块可谓是轻车熟路了但还是遇到了一些问题。例如:8266不能和nano共用一个电源否则会由问题。。。。其实我感觉这是nano太垃圾的问题不关我事。还有个设备喊话记得加D这样才表示是你自己第三方设备登录。再后面的通信内容不能包含json格式也是迷惑的很。接下来说一说接线: mq_2--------->A0
mq_135------->A1
pm2_5-------->D2,A3
oled sda----->D4
oled scl----->D3
TX,RX接8266。PM2.5模块具体接线: 所有项目打包合集:放在服务器/root/项目备份 下做备份啦。 补充 PCB的绘制和实物的焊接后台贝壳的截图: PCB实物图(忽略那根飞线,有可能是DC部分没接好反正只能走Arduino取电了。。) 还剩几块板子出邮费免费送也不知有没有人要嘿嘿,毕竟打板比邮费便宜。 项目随后打包上传github。容我整理整理。 PS: 整篇内容是以MD格式编辑,貌似数码之家直接支持MD来着?实时预览很正常。妙啊! |