引言:如果你也跟我一样,需要实时监控发酵箱,花盆。。。之类的东西的温度湿度什么的。又被各种物联网平台的标准及网络搞到头大的话,可以考虑自己搭建一个物联网平台。

好在互联网发展到今天程序世界拥有巨大的资源,感谢程序猿们的奉献,不用造太多轮子,废话少说,撸起袖子直接干:

项目结构:
Arduino 主板(连接到一个温度传感器)通过 MTTQ 协议定期将温度和湿度信息发送到自建iot平台,并使用 echarts中的将收集到的数据描绘成图表。

至于为什么选择MQTT作为传输协议,因为我一开始就用了IBM的IOT平台。MQTT是IBM专为了物联网设计的传输协议,但是不知为何IBM的IOT平台我家的网老连不上。

项目安全:
鉴于去年美国发生了一起物联网攻击大戏,因此我们也得考虑项目安全因素。
1、设备层安全: MQTT 协议在 CONNECT 消息中提供了 username 和 password 字段来执行设备身份验证。我们可以要求设备在连接 MQTT 代理时必须发送用户名和密码。
2、传输层安全:可以使用SSL加密传输。
3、应用层安全:MQTT都是明文传输信息,考虑用AES加密所有信息。

本人是物联网新手,手头只有一个arduino 板跟一张网卡,暂时没有办法解决在Arduino 主板使用SSL,如果要使用SSL的小伙伴可以考虑使用草莓派。这样系统存在安全缺陷就是存在被钓鱼网站冒充身份的可能。

构建Arduion:

1、把网卡叠插上去之后,DHT11 的接地引脚(在网格面向前面时,最右侧的一个引脚)通过黑线连接到 Arduino 上的 GND 引脚。DHT11 上的 VDD 引脚(最左侧的引脚)通过红线连接到 Arduino 上的 5V 电源引脚。最后,DTA 引脚(左起第二个)连接到 Arduino 上的数字引脚 3。

2、下载 Arduino 的客户端MQTT 库http://pubsubclient.knolleary...
3、下载 Arduino 的客户端AES库 https://github.com/DavyLandma...
4、把下载的库导入 Arduino IDE 目录的 libraries 子目录,然后新建一个项目,下面是示例项目。

程序初始化自定义信息列表:
1、网卡MAC地址:mac2、 IP:ip
3、服务器地址:localserver
4、AES密钥:uint8_t key
5、MQTT验证用户名:username
6、MQTT验证密码:password系统变量:
1、DHT11感应器:DHT11
2、获取DHT11感应器 的实时数据函数:getData()
3、将获取的数据拼接成json字符串函数:buildJson()
#include <SPI.h>
#include <Ethernet.h>
#include <PubSubClient.h>
#include <dht11.h>
#include <AESLib.h>// MAC address
byte mac[]    = {0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0x4D };
char macstr[] = "deedbafefeed";
// local MQTT server
byte localserver[] = {192, 168, 1, 5 };
//  IP
byte ip[]     = {192, 168, 1, 22 };String clientName = String("Arduino:") + macstr;
uint8_t key[] = {0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5};
char username[]="test";
char password[]="test";void callback(char* topic, byte* payload, unsigned int length);
dht11 DHT11;
float tempF = 0.0;
float tempC = 0.0;
float humidity = 0.0;unsigned long time = 0;EthernetClient ethClient;PubSubClient client(localserver, 8088, 0, ethClient);void setup()
{// Start the ethernet client, open up serial port for debugging, and attach the DHT11 sensorEthernet.begin(mac, ip);Serial.begin(9600);DHT11.attach(3);}
void getData() {int chk = DHT11.read();switch (chk){case 0:Serial.println("Read OK");humidity = (float)DHT11.humidity;tempF = DHT11.fahrenheit();tempC = DHT11.temperature;break;case -1:Serial.println("Checksum error");break;case -2:Serial.println("Time out error");break;default:Serial.println("Unknown error");break;}
}String buildJson() {String data = "{";data+="\n";data+="\"temperatureF\": ";data+=(int)tempF;data+= ",";data+="\n";data+="\"temperatureC\": ";data+=(int)tempC;data+= ",";data+="\n";data+="\"humidity\": ";data+=(int)humidity;data+="\n";data+="}";//data+="\n";//data+="}";return data;
}void loop()
{char clientStr[29];clientName.toCharArray(clientStr,29);char topicStr[26];getData();if (!client.connected()) {Serial.print("Trying to connect to: ");Serial.println(clientStr);aes128_enc_single(key,username);aes128_enc_single(key, password);client.connect(clientStr,username,password);}if (client.connected()) {client.subscribe ("test", 0);String json = buildJson();char jsonStr[200];json.toCharArray(jsonStr,200);boolean pubresult = client.publish("test",jsonStr);Serial.print("attempt to send ");Serial.println(jsonStr);Serial.print("to ");Serial.println(topicStr);if(pubresult)Serial.println("successfully sent");elseSerial.println("unsuccessfully sent");}delay(20000);
}

构建IOT数据接收服务:

1、下载国人开源的MQTT服务器:https://github.com/zer0Black/...
2、修改一下主程序,com.syxy.protocol.mqttImp.process.ProtocolProcess.java,将校验用户名与密码标识的判断语句注释掉,要求所有CONNECT 消息中必须提供 username 和 password 字段,if (connectMessage.getVariableHeader().isHasUsername() &&connectMessage.getVariableHeader().isHasPassword())
3、自己写一个AES类,并提供对应的密钥字段 key。用户名与密码进行解密并校验。
4、由于 netty框架中ByteBuf在创建时需要指定一个maxCapacity(最大容量),由于我们使用了AES加密,原代码中设置内存太小,存在内存溢出问题,需要修改
com.syxy.util.BufferPool.java 中maxBufferPoolSize 定义值。
5、通讯成功后将publish消息Payload写入数据库保存即可。

构建部署数据图表:
百度的echarts做的不错,将数据导出,按文件配置好即可产出了。http://echarts.baidu.com/

使用 Arduino Uno 与MQTT,echarts,java自己手动撸一个IOT平台相关推荐

  1. java 脚手架_撸一个Java脚手架,一统团队项目结构风格

    虽然maven已经提供了maven-archetype-webapp.maven-archetype-quickstart等项目骨架帮助我们快速构建项目架构,但是默认提供的archetype初始化的项 ...

  2. java 防篡改_用JAVA二十分钟撸一个简易图片防篡改

    看到有个毕设是搞图片防篡改的,就自己撸了一个简易图片防止篡改. 原理 将图片字节生成字符串使用摘要算法加密,将加密生成的字节写到图片最后.验证时,首先读取末尾的加密字节,读取完成以后删除,再通过摘要算 ...

  3. 基于atmega8的arduino最小系统制作(arduino uno作为下载器)

    我们在最小系统的制作过程中,常常会遇到下载器驱动安装不成功的问题,绝大多数原因是因为下载器驱动不兼容win10系统.而当用arduino uno作为下载器为最小系统烧录程序的话,不但解决了win10下 ...

  4. 使用Arduino UNO烧录ATMETA16U2

    0. 前言 因某种原因需要更新我的Arduino DUE上面的USB转串口的芯片ATMEGA16U2里的固件, 找了很多资料,下面是操作步骤,记录一下,方便后续查找: 1. 用Arduino UNO制 ...

  5. Arduino UNO新手零基础入门学习教程博客汇总

    写在开头 最近在上Arduino的课,可以说Arduino对新手来说非常友好了,因为相比于51和32,Arduino的库函数下载就好,不需要自己去写,就很方便 我的硬件设备 这个是学校提供的硬件设备, ...

  6. QT使用MQTT协议对接华为IOT平台

    QT使用MQTT协议对接华为IOT平台文章目录QT使用MQTT协议对接华为IOT平台一.环境说明二.QMQTT源码编译三.对接华为IoT平台四.效果验证    最近想使用QT通过MQTT协议接入华为的 ...

  7. arduino 与java通信_在Java应用程序与Arduino Uno之间建立串口连接

    在本篇文章中,我们将主要演示如何在Java应用程序和Arduino Uno之间建立串口连接.本文分为两个部分:在第一部分中,说明了如何从Java应用程序向Arduino发送文本(数字).此外,Ardu ...

  8. arduino uno 掌控板实现数据上传到阿里云平台

    实验原理:arduino uno采集数据,通过UART接口发送数据到掌控板,掌控板连接阿里云,发送数据到阿里云. 硬件:arduino uno Mind+ 软件平台:arduino ide Mind+ ...

  9. arduino uno r3引脚图_Arduino入门: 安装和熟悉Arduino IDE

    在上一篇<Arduino入门2: 熟悉和挑选Arduino的开发板>中我们了解了Arduino的构成,种类还有如何选择适合自己的Arduino硬件.在本篇教程中,我们来关注一下Arduin ...

  10. 制作Mind+ Arduino UNO + EMW3080芯片连接阿里云的用户库

    文章目录 前言 一.实验准备 1.硬件准备 2.软件准备 二.实验过程 1.下载样例库 1.2.用户库文件结构 1.3.相关配置文件说明 1.3.1.config.json配置文件 1.3.2.mai ...

最新文章

  1. mysql Navcat触发器生成订单号
  2. 全球首个自适应机械臂:精准抗干扰,斯坦福华人团队打造
  3. 一天搞定CSS: overflow--14
  4. oracle asin(),PLSQL ASIN用法及代码示例
  5. Java并发编程—AQS原理分析
  6. springboot 多了8小时_日本人不明白:中国的奶茶有多好喝,值得排队8小时去买?...
  7. 关于样式表setStyleSheet
  8. [数据库]---nosql,非关系型数据库整理
  9. 学习《HTML+CSS基础课程》里的权值
  10. python没有requests模块_python没有名为“requests”的模块
  11. CRT工具远程登陆Google Cloud远程ssh登录方法
  12. 记一次mysql千万订单汇总查询优化
  13. bzoj 1260: [CQOI2007]涂色paint(区间DP)
  14. open***成功配置思考
  15. Delphi中CoInitialize之探究
  16. tensorflow:卷积函数----tf.nn.conv2d
  17. SSD Single shot detection 单发多框检测 实现 多尺度锚框 动手学深度学习v2
  18. python3 数据挖掘 之 爬取 智联招聘网站来巩固pandas
  19. Unity添加自发光材质
  20. Excel PivotTable 使用心得手顺分享(一)

热门文章

  1. 使用Axis导入webService报错No support for attachments
  2. ***X档案2007配套光盘
  3. Java程序员面试应该准备什么?
  4. Android apk快速定位、灰色按钮克星--DroidSword
  5. 3D模型欣赏:斯巴达女将军 长枪圆盾战士 性感美女
  6. 豆瓣top250电影数据分析
  7. 查计算机硬盘序列号6,Win7电脑查看硬盘序列号的方法
  8. u盘dos启动盘制作工具 v9.36正式版
  9. 什么是ctfmon.exe,为什么运行?
  10. Inter core i7处理器中(x86架构)驱动开发:关于APCI Hardware ID的描述