作者:HelloGitHub-Anthony

这里是 HelloGitHub 推出的讲解开源硬件开发平台 Arduino 的系列教程。

上一篇文章,我们介绍了如何安装 Arduino 支持库、DHT 11 温湿度传感器以及 OLED 屏幕的使用,并用 Arduino 制作了一个小型温湿度显示器。

在这个讲究万物互联的时代,让咱们的 Arduino 温湿度也去“云上”玩玩,有个学名叫物联网。

物联网(IoT) 是由物理对象组成的网络,这些物理对象嵌入了传感器、软件和其他技术,以便可以通过互联网与其他设备和系统建立连接并交换数据。

是不是瞬间感觉高大上了一些,但是不用担心本期的知识超纲,因为高深的我也不会!

今天我们讲解:如何把上一期做的温湿度设备上云,通过物联网平台完成实时数据上传远程控制设备。实现将 Arduino 设备测量的温湿度数据上传到物联网平台,然后接收平台发送指令控制设备上 LED 灯光开关。

你是否已经开始摩拳擦掌了呢?下面我们开始“上云”!

一、实现联网功能

1.1 模块介绍

首先,如果想要 Arduino 连接到物联网平台的服务器,必然需要先让设备能够连接到网络(比如家里的 WiFi),这里我们就需要用到 ESP-01(s) 模块,来实现这个功能。

其使用方法和前文介绍过的组件类似,只需要用到 VCC(3.3v)、GND、TX、RX 四根线,就能和 Arduino 进行通信。我这里使用的是 ESP-01+转接板,转接板实现了 5v->3.3v 的变压以及 RxTx 接口的引出,方便后续使用。

大多数 ESP-01(s) 模块在出厂时,都已经内置了 AT 指令固件,在使用时只需要向模块发送 AT 指令即可进行网络连接、数据传输等操作。

关于什么是 AT 指令,简单来讲就是设备间一种通信消息规范,更具体的定义和应用场景读者可以自行了解。

1.2 模块使用

ESP-01 模块接线方式如下:

  • GND -> GND
  • VCC -> 3.3v(单独模块) 5.5v(带转接板)
  • Tx -> Rx
  • Rx -> TX

用到的 AT 指令如下:

  • AT+RST:重置模块
  • AT+CWMODE=1:切换模式
  • AT+CWQAP:断开 WiFi 连接
  • AT+CWJAP="WiFi名","密码":连接 WiFi
  • AT+CIPSTART="TCP","IP",端口:连接服务器
  • AT+CIPMODE=1:切换到 TCP 透传模式
  • AT+CIPSEND:开始发送数据

1.3 代码

Arduino 连接 WiFi 的代码:

#include <Arduino.h>

boolean at_exec(char *data, char *keyword, unsigned long time_out)
{
Serial.println(data);
Serial.flush();
delay(100); // 等待响应
unsigned long start = millis(); while (Serial.available() < strlen(keyword))
{
if (millis() - start > time_out)
return false;
}
if (Serial.find(keyword))
return true;
else
return false; while (Serial.available())
Serial.read(); //清空串口缓存
} void setup()
{
Serial.begin(115200);
while (!at_exec("AT+RST", "OK", 1000));
while (!at_exec("AT+CWMODE=1", "OK", 1000));
while (!at_exec("AT+CWQAP", "OK", 1000));
while (!at_exec("AT+CWJAP=\"HelloGithub\",\"PassWord\"", "WIFI CONNECTED", 2000));
while (!at_exec("AT+CIPSTART=\"TCP\",\"183.230.40.40\",1811", "CONNECT", 1000));
while (!at_exec("AT+CIPMODE=1", "OK", 500));
while (!at_exec("AT+CIPSEND", "OK", 500));
//Serial.println("*产品ID#鉴权信息#脚本名称*"); // 下文会将如何获取这部分信息
}

注意:

  • 下载之前要断开 Arduino 和 ESP-01 的连接,否则可能会下载失败
  • 执行 AT+CIPSEND 后,模块将不再响应 AT 指令,如果需要修改配置则必须断电重启模块
  • 记得改 AT+CWJAP 的参数,对应 WiFi 用户名和密码

烧录后,连接模块重启 Arduino。如果在路由器管理界面的“已连接设备”页面,看到我们的 WiFi 设备,则表示成功!

二、物联网平台

这里我们使用的是 OneNet 物联网平台,它是由中国移动打造的物联网 PaaS 开放平台,通过这个平台可以轻松(免费)实现设备”上云“。

下面,将介绍从注册开始到完成设备上云,所需的所有云端配置步骤。

2.1 注册

打开 OneNet 官网,点击右上角的“注册”注册账号。

2.2 新建产品

完成注册登录账号后,点击右上角的“控制台”进入控制页面。

进入后点击 “全部产品服务”->“多协议接入”:

在“多协议接入界面”选择 TCP 透传->添加产品:

在弹出的侧边栏填写相关信息,“产品行业”和“类别”随便填写即可,最后点击“确定”完成新建产品。

2.3 添加设备

找到刚刚创建的产品我的是 “HelloGitHub”,然后点击左侧栏的“设备列表”,在新出现的页面中点击“添加设备”,填写完相关信息最后点击“添加”,完成增添设备的操作。

2.4 编写数据解析脚本

接下来,我们配置云端的数据解析脚本,不用自己动手写直接下载官方脚本到本地改一改就能用。

在解压下载好的文件夹中,找到 sample.lua 文件里的 device_timer_init 函数(第 303 行),改成如下内容:

function device_timer_init(dev)
-- 定时发送开关灯指令 --
dev:timeout(0)
dev:add(10,"open","open")
dev:add(12,"close","close")
end

找到 device_data_analyze 函数(在文件的最后),修改为如下内容:

function device_data_analyze(dev)
local t={}
local a=0
local s = dev:size()
-- 我们定义 一次发送 十个 字节,分别为 温度 湿度 --
add_val(t,"Temperature",a,dev:bytes(1,5))
add_val(t,"Humidity",a,dev:bytes(6,5))
dev:response()
dev:send("received")
return s,to_json(t)
end

如果大家对脚本使用方法感兴趣的话,可以查看代码的注释和官网上接入文档,这里就不做过多讲解了。

2.5 上传脚本

将该文件保存后,回到刚刚打开过的“设备列表”点击“上传解析脚本”。

至此,云端配置完毕。

2.6 连接物联网平台

修改 1.3 的代码,将 “下文会将如何获取这部分信息” 这行代码改成:

Serial.println("*产品ID#ILoveHelloGitHub#HG*");

将云端配置完成后,获得的产品 ID鉴权信息脚本名称等参数,替换到对应位置。(*产品ID#鉴权信息#脚本名称*

最后,重新烧录代码并重启 ESP-01 模块。稍等片刻,在云端刷新“设备列表”页面,看到我们的设备,证明设备成功连接上了物联网平台。

三、Arduino 上云

经过前面的铺垫,我们“上云”的旅程即将迎来最激动人心的部分。将设备所在环境的温湿度数据上传到云端!

3.1 代码

既然是上传温湿度数据,就需要用到我们上期讲的 DHT11 模块(温湿度传感器),然后结合本期连接网络的代码,分分钟就可以完成啦。

但是为了增加项目的趣味性,我额外添加了个解析物联网平台发送命令,远程控制开关 LED 的函数。

代码片段如下:

void setup()
{
// 改成自己云端的参数
Serial.println("*产品ID#ILoveHelloGitHub#HG*");
} // 根据从串口收到的 字符串 执行相应的指令
bool command_parse(String command){
...
if (command == "open")
{
digitalWrite(LED_BUILTIN, HIGH);
} else if (command == "close")
{
digitalWrite(LED_BUILTIN, LOW);
}
}

完整代码:https://github.com/HelloGitHub-Team/Article/blob/master/contents/Other/Arduino/3/code.cpp

最后,修改完整代码中的 WiFi 名和密码,以及 产品 ID 后,重新烧录代码即可。

3.2 上传温湿度数据

稍等片刻后,查看物联网平台的“设备信息”,如果看到 Arduino 上传的室内温湿度信息,就证明我们的代码运行成功啦。

3.3 远程控制

下面演示如何通过物联网平台,远程控制灯的开关。

打开物联网平台,点击“设备界面”的“下发指令”,在弹出的表单上选择“字符串”选项,输入 “open” 或 “close” 指令。

到这里,就完成了远程控制 Arduino 内置 LED 灯开/关的效果!

成功!撒花

四、总结

这篇文章,结合 Arduino、传感器、WiFi 以及 OneNet 物联网平台,通过边做边讲的方式,讲述了一个设备从联网到上云的完整过程。虽然是入门级的教程,但是这些知识已经可以帮助你完成,诸如智能开关、自动喂食器等实用和有趣的项目。

不小看每一次小的进步,不积跬步无以至千里。

如果说移动互联网的浪潮已经过去,那么下一个浪潮中会不会有物联网的影子呢?反正我觉得技多不压身,对此你怎么看?欢迎在评论区发表你的看法。


至此,整个 Arduino 系列教程,到这里就结束了。完结!再次撒花

希望,HelloGitHub 的 Arduino 系列教程,能够勾起你对物联网的兴趣,毕竟兴趣才是最好的好老师。

本期的内容就是这些,这里是 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。

感谢您的阅读,如果觉得内容还不错,一定要记得点赞、留言、分享,我们下期见!

物联网?快来看 Arduino 上云啦的更多相关文章

  1. 上云利器,K8S应用编排设计器之快到极致

    前言在前面的文章中,我们已经提到,华为云有一个上云利器:应用编排设计器.作为华为云应用编排服务与用户沟通的桥梁,设计器坚持用户体验至上的理念,以图形化方式,在鼠标点击之间,助力企业快速上云.优质的交互 ...

  2. 上云、微服务化和DevOps,少走弯路的办法

    本文由  网易云发布. 作者:张亮 如果说一个项目的发展历程就像一段未知的旅程,那<云原生应用架构实践>就像一张地图,基于前人的探索标明了在这段旅途中将会碰到的障碍,并注明了越过这些障碍的 ...

  3. SaaS上云工具包为企业应用构筑上云之梯

    导语:本文中,阿里云资深技术专家郑刚将聚焦SaaS上云工具包如何帮助企业上云,包括产品上云.商品上市.服务上心,讲述了SaaS上云工具包为客户和伙伴提供的价值.在SaaS上云工具包整体解决方案的帮助下 ...

  4. 阿里云PolarDB发布重大更新 支持Oracle等数据库一键迁移上云

    5月21日,阿里云PolarDB发布重大更新,提供传统数据库一键迁移上云能力,可以帮助企业将线下的MySQL.PostgreSQL和Oracle等数据库轻松上云,最快数小时内迁移完成.据估算,云上成本 ...

  5. Arduino上传数据至贝壳物联并与FPGA进行交互

    本篇实现Arduino与FPGA交互,当然也没有什么新的协议,还是基于串口通讯,现在学一个串口通信基本上可以驱动大多数模块了,而且和各种单片机无缝数据交互,Arduino由于其强大的库函数支持,在实现 ...

  6. 从DevOps到Cloud Native,应用上云姿势全解锁

    本文由  网易云发布. 作者:林帆 序文 伴随着IaaS.PaaS等云端基础设施技术的成熟,“应用上云”成为许多企业软件部门的心头大事.通过把传统软件系统搬到云上,一方面可以让业务方获得更多的资源灵活 ...

  7. 硬核评测:企业上云的极速存储挑战,华为云全新极速IO云硬盘性能评测

    来源:至顶网 作者:董培欣 借助华为云全新一代极速IO云硬盘开启邀测的时机,至顶网评测实验室展开了一次华为云极速IO云硬盘与超高IO云硬盘的性能对比测试活动,并且尝试通过相关测试成绩,对云硬盘的应用能 ...

  8. 上云测试,这些关键点你get 到没有

    导读,先从云化说起,再谈谈云化形态下,除了常规的功能测试,云化的测试,还需要有几个必须要get到的硬核指标,最后在分别详解这些关键点硬核指标是什么,和如何测试呢.这是个值得深思的问题,希望所有测试人都 ...

  9. [转帖]上云测试,这些关键点你get 到没有

    上云测试,这些关键点你get 到没有 https://www.cnblogs.com/mypm/p/10852656.html?tdsourcetag=s_pcqq_aiomsg sticky 还有s ...

随机推荐

  1. 帝国cms输出 自增数字 方法大全

    帝国cms输出 自增数字 方法大全 1.帝国cms中调用序号 万能标签调用 使用:[!--no.num--] 标签模板: <li><span>[!--no.num--]< ...

  2. linux中rsync备份文件

    linux中rsync备份文件 备份文件的方式 备份方式: cp : 本机复制 scp: 远程复制 推(本地上传到远程服务器): scp 1.txt root@ip:[路径] [root@m01 ~] ...

  3. android软件简约记账app开发day05-记账页面条目代码优化和bug解决

    android软件简约记账app开发day05-记账页面条目代码优化和bug解决 今天还是因为该bug又极大的耽误了项目进程,该开发文档都要没有时间来写了. 先说bug吧,在昨天已经实现了页面图标的展 ...

  4. Dom基础(三):事件冒泡,事件委托(事件代理)和事件捕获

    javascript中的addEventListener(事件名,回调,布尔) 其中第三个参数默认为false-事件冒泡,true为事件捕获 二者区别: 事件冒泡:目标元素事件先触发,然后父元素事件触 ...

  5. Go能实现AOP吗?

    hello~大家好,我是小楼,今天分享的话题是Go是否能实现AOP? 背景 写Java的同学来写Go就特别喜欢将两者进行对比,就经常看到技术群里讨论,比如Go能不能实现Java那样的AOP啊?Go写个 ...

  6. redis中的字典结构是怎样的?

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 基础概念 redis支持的5种数据类型中,有hash类型,hash类型的 ...

  7. XCTF练习题---MISC---base÷64

    XCTF练习题---MISC---base÷64 flag:flag{E33B7FD8A3B841CA9699EDDBA24B60AA} 解题步骤: 1.观察题目,下载附件 2.打开附件,观察内容和题 ...

  8. celery介绍、架构、快速使用、包结构,celery执行异步、延迟、定时任务,django中使用celery,定时更新首页轮播图效果实现,数据加入redis缓存的坑及解决

    今日内容概要 celery介绍,架构 celery 快速使用 celery包结构 celery执行异步任务 celery执行延迟任务 celery执行定时任务 django中使用celery 定时更新 ...

  9. Linux-流程控制语法-函数-属组

    1.流程控制 1.1 条件选择 1.1.1选择执行if语句 格式: if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ] ... ...

  10. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...