查看: 7701|回复: 3

[6月赛] 【开源盛事】简易的宠物喂食器管理系统

[复制链接]

4

主题

44

帖子

101

积分

注册会员

Rank: 2

积分
101
发表于 2017-6-9 16:59:58 | 显示全部楼层 |阅读模式
本帖最后由 klren 于 2017-6-30 16:09 编辑

搭建简易的物联网系统,实现数据采集,数据可视化显示以及远程控制功能。
代码地址:
1.硬件代码 https://github.com/ZZES-ZVD/PET_Auto_Feed
2.TCP服务端和api代码 https://github.com/ZZES-ZVD/PET_Feed_Server
3.Django web端代码 https://github.com/ZZES-ZVD/Django_IOT_PET

一、使用mini板获取数据

1.使用到的硬件
  • mini板
  • 人体红外传感器
  • 继电器
  • 风扇
  • 9g舵机


2.相关代码(基于mini板的http例程修改,具体代码查看GitHub)
1)将传感器数据封装成JSON格式

{“tem”:xx,”hum”:xx,”feng”:xx,”indoor”:xx}
  1. <font face="黑体">uint32_t HTTP_NewPostPacket(char *pkt, char *val1, char *val2, char *val3, char *val4)
  2. {
  3.        char dataBuf[50] = {0};
  4.        char lenBuf[10] = {0};
  5.        *pkt = 0;
  6.        sprintf(dataBuf, "{\"tem\":\"%s\",\"hum\":\"%s\",\"feng\":\"%s\",\"indoor\":\"%s\"}", val1, val2, val3, val4);     //采用分割字符串格式:type = 5
  7.        sprintf(lenBuf, "%d", strlen(dataBuf));
  8.        strcat(pkt, dataBuf);
  9.        return strlen(pkt);
  10. }</font>
复制代码
2)风扇自动开启,根据温度判断
  1. <font face="黑体">                                if(temp > 35){
  2.                                             JDQ_Switch(J_ON,JDQ_1);
  3.                                 }
  4.                                 if(temp < 26){
  5.                                            JDQ_Switch(J_OFF,JDQ_1);
  6.                                 }</font>
复制代码

二、TCP服务器
1.使用到的技术
  • Nodejs
  • Nodejs自带的TCP包net
  • Nodejs操作mysql的包mysql(npm install mysql)

2.相关代码(具体代码查看GitHub
1)将接收到的json数据解析存入数据库
  1. var text =JSON.parse(data.toString());
  2. console.log(text);
  3.                 var arr = {};
  4.                 arr.tem = text.tem;
  5.                 arr.hum = text.hum;
  6.                 arr.feng = text.feng;
  7.                 arr.indoor = text.indoor;
  8.                 arr.time = new Date().toLocaleString();
  9.                 conn.query('INSERT INTO mysite_iotdata SET ?', arr, function(error,result,fields){
  10.                            if (error) throw error;
  11.                 });
复制代码
2)开放端口为4001
  1. .listen(4001);
复制代码

三、Express提供数据api
1.使用到的技术
  • Nodejs的Express包(npm install express)
  • Nodejs的mysql包(npm install mysql)

2.相关代码(具体代码查看GitHub)
1)以温度数据api为例(提取最新的十个数据放入数组)
  1. app.get('/tem',function(req,res){
  2.           var tem = [];
  3.           conn.query('SELECT * FROM mysite_iotdata',function(err,rows,fields){
  4.                      var i = rows.length;
  5.                      var j =i-10;
  6.                      var c= 0;
  7.                      while(j < i ){
  8.                                 tem[c] = rows[j].tem;
  9.                                 c++;
  10.                                 j++;
  11.                      }
  12.                      res.send(JSON.stringify(tem));
  13.           })
  14. })
复制代码

四、Django web端
1.使用到的技术
  • Python3.5
  • Django1.11
  • pymysql
  • ECharts

2.页面展示(具体代码查看GitHub)
1)基本的主页
QQ截图20170609165002.jpg

2)信息介绍
QQ截图20170609165047.jpg


3)数据展示(温湿度折线图显示,宠物位置状态和风扇状态的动态显示,还有喂食次数的统计)
222.jpg 111.jpg


五、远程控制
1.使用到的技术
  • Nodejs的net包
  • Nodejs的mysql包

2.相关原理具体代码查看GitHub)
前端页面触发按钮点击事件,通过Ajax访问控制接口
将命令1存入数据库,TCP服务器将命令1读取,并发送给单片机,同时向数据库存入命令0,达到关闭的目的。
单片机接收到命令,实现舵机的开合,达到喂食的目的。
Django进行数据库的统计操作,统计命令1的个数,供给前端页面显示喂食次数


六、实体展示
IMG_20170615_165618.jpg.JPG


回复

举报

0

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2017-8-5 00:44:23 | 显示全部楼层
漂亮,学习了!

4

主题

44

帖子

101

积分

注册会员

Rank: 2

积分
101
 楼主| 发表于 2017-6-12 10:40:40 | 显示全部楼层
cdd 发表于 2017-6-12 09:21
如果这个做出来了,送我一套可好

哈哈 我觉得我可以拿这个装零食0.0.   

95

主题

576

帖子

2207

积分

金牌会员

Rank: 5Rank: 5

积分
2207
发表于 2017-6-12 09:21:22 | 显示全部楼层
如果这个做出来了,送我一套可好
1、OneNET交流群6:887624121
该群目前非常活跃,欢迎大家参与进来,交流,讨论,答疑,解惑~~
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表