DFRobot万物互联大赛第一轮
前言
原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。
DF搞的这个比赛还挺有趣:micro:bit × OBLOQ DF创客社区玩转物联网挑战赛,一边在写文章一边在爱奇艺上看着印度电影巴霍巴利王,别说,浮夸但还不错。
1、硬件分析
所谓“若远行,先利其器”,我们首先要好好了解提供的硬件,知道是什么,能做什么,后续才会物尽其用。
第一阶段硬件如下:
- Micro:bit (自备)
- Micro:Mate多功能I/O扩展板
- OBLOQ物联网模块
1.1 micro:bit
板载硬件资源之前讨论过。文章还没整理,哈哈,拖延症
1.2 Micro:Mate 扩展板
特性:
- 3个模拟口(仅支持3.3V模拟输入)
- 3个数字口(支持5V/3.3V数字输入输出)
- 舵机驱动电流:1.2A
- 输入电压:3.3V/5V
- 板载3.5mm耳机直插
注意:
- Micro:Mate通过弹针连接micro:bit主板,安装时,请将螺丝拧紧,防止接触不良。
- Micro:Mate由于本身电压限制(3.3V) 不支持5V模拟输入模块,如PH计等5V设备将无法兼容。
- Micro:Mate的USB接口仅作供电使用,无法用于程序上传。
- 驱动大电流设备,如舵机等原件,请将元件接至8 12 16口,并调整至5V输出,否则可能由于电流过大烧坏电路板!
- 板载了一个数字口电源切换开关,使数字口供电可在5V、3V或OFF之间任意切换。
优点是很小巧,支持外置电源。
我们再深入一下看看Mate的原理图,可以从Mate产品维库上找到:
再对比mb的引脚图:
仔细看一下,有以下几点:
- 仅引出了micro:bit的P0、P1、P2(以上为Analog)、P8、P12、P16等6个引脚,P0连接到耳机接口
- 板载AMS1117-3.3是一种输出电压为3.3V的正向低压降稳压器
- D1、D2、D7三个LED无法通过用户自定义
- 这个P12是干啥的?
1.3 OBLOQ物联网模块
这个是比较有特色的东西,本质是大火的ESP8266,之前写过详细的文章,DFRobot进行了封装,仅引出串行通讯引脚,并且不仅可以连接DFRobot自己的服务器,方便一般用户快速上手使用。不过我们看看ESP8266和mb的硬件配置:
ESP8266(ESP-12F为例) | Nordic nRF51822 | |
---|---|---|
处理器 | RISC Tensilica L106 32 位 | ARM Cortex-M0 32位 |
主频 | 80/160MHz | 16MHz |
Flash ROM | 4MB | 256KB |
运行内存 | ~40KB | 16KB |
问苍茫大地,谁主沉浮?我们也可以把性能更强的OBLOQ模块作为主应用处理器,mb作为外设使用。
看起来是引出了一个3色LED,两个按钮(UPGRADE和RESET)。
2、小试牛刀
这里我们采用MakeCode,配合DFRobot的pxt支持包:https://github.com/DFRobot/pxt-Obloq,还可以参考一、二。
注意!关于Obloq图块的大部分设置参考可以在https://github.com/DFRobot/pxt-Obloq/blob/master/Obloq.ts 找到。
mb的MicroUSB接口支持串口调试,而OBLOQ使用串口通讯,好在mb提供了串行接口重定向功能,我们这里把蓝、绿线接到随便两个接口上(不推荐P0,已接到音频接口),然后设定串口重定向即可。区别在于Analog区三个仅支持3.3v,Digital区支持3.3/5v切换。
Question:nRF51最多支持几个串口?
串行重定向的话,涉及一个波特率的问题,查看第219行,可知默认波特率9600:
serial.redirect(
Tx,
Rx,
BaudRate.BaudRate9600
)
LED矩阵会随着状态显示不同图案,三色LED代表意义如下:
颜色 | 指示状态 |
---|---|
红色 | 没有正常运行 |
蓝色 | 正在连接wifi |
绿色 | 正常工作 |
紫色 | Mqtt连接断开 |
初版代码如下:https://makecode.microbit.org/_9VAW1X35DDuH
功能特性:
- 通电后按自动通过LED矩阵显示当前温度
- 按A键开始向服务器发送数据,B键停止发送
- 从手机APP里发送
temperature
则立即返回当前温度;发送light
同理。此外连接风扇、LED灯都可以进行控制
注意点:
循环语句中尽量减少调用获取temperature函数,降低耗电。默认60s上传一次数据,通过命令可以立即返回温度和环境亮度信息
通过status变量控制是否向远端服务器发送数据,同时检测连通服务器时才发送数据,避免冗余
quit
指代断开串口,目前还没公布相关API/**
* Disconnect the serial port.
*/
export function Obloq_quit(): void {
obloqWriteString("quit!\r")
}
dfrobot的EasyIoT平台集成了MQTT Broker、subscriber、publisher功能,其中数据记录间隔不少于1s,否则无法显示,但是实际上服务器本身无限制,所以app能收到,但是网页不显示
Obloq模块作为中间件,抽象出了共用的API,可以指定第三方服务器。从这里可以看到相关API(等待官方完善后释出的正式版API)
OBLOQ模块支持最大订阅5个TOPIC,但由于目前pxt只支持一个topic,发送请求时会影响上传数据的统计,造成干扰数据,解决方法是开一个新的topic,借助mpython或者用第三方服务器
/**
* Subscribe to a Topic
* @param top set top, eg: top
*/
//% weight=67
//% blockId=Obloq_subTopic
//% block="subTopic"
//% advanced=true
export function Obloq_subTopic(): void {
if (!serialinit) {
Obloq_serialInit()
}
obloqWriteString("|4|1|2|"+OBLOQ_IOT_TOPIC+"|\r")
}
iot.dfrobot.com.cn使用了以下前端技术,后端数据存储是啥倒不清楚,服务器搭在腾讯云上海服务器上。
3、MQTT基础
知其然亦知其所以然,关于mqtt的知识可以参考我16年写的文章,彼时使用手机和Intel Galileo Gen2通过网络(无线或者有线网)连接,当然也可以选用BLE或者ZigBee之类。然后是通讯协议的选择,固然TCP/IP协议很成熟,但是对于物联网嵌入式应用来说,略显臃肿。目前物联网常用的协议包括CoAP、MQTT、XMPP、RESTful HTTP等,这里介绍应用最为广泛的MQTT协议。关于各种协议之间的差别,可以查看这篇文章。
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分。该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和致动器(比如通过Twitter让房屋联网)的通信协议。
Mosquitto是一款实现了 MQTT v3.1 协议的开源消息代理软件,提供轻量级的,支持发布/订阅的的消息推送模式,使设备对设备之间的短消息通信简单易用。
MQTT协议的基本概念:
【MQTT协议特点】——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制。
【MQTT协议角色】——在RESTful架构的物联网系统,包含两个角色客户端和服务器端,而在MQTT协议中包括发布者_pub(lisher),代理器(服务器)-broker和订阅者-subcriber。
【MQTT协议消息-m(essage)】——MQTT中的消息可理解为发布者和订阅者交换的内容(负载),这些消息包含具体的内容,可以被订阅者使用。
【MQTT协议主题-t(opic)】——MQTT中的主题可理解为相同类型或相似类型的消息集合。
——Via
注意:以下仅作功能演示,暂时不要用于生产环境。记得开启密码验证。
扩展阅读
以下是非常棒的MQTT协议入门与理解,这个博客真的非常棒,感谢博主的分享!
之前需要手写相关代码去连接服务器、订阅、发送信息,现在obloq直接在固件里封装好并提供API(向串口写入数据然后返回),方便许多。
4、手机APP控制交互
理解了mqtt的基本原理,我们就好办了,MQTT Dashboard是我用过几个后能满足要求的Android APP,谷歌商店有,如果无法访问Google Play可以从这里下载手动或者使用apkpure.com提供的软件市场,包含了大部分谷歌商店的应用内容。
手机客户端初始界面,其中:
- 除了微信小程序EasyIoT,我们可以使用其他APP,例如
- iOS:IoT OnOff 和 MQTT
- Android:MQTT DashBoard和MQTT Dash
- EasyIoT的地址为
iot.dfrobot.com.cn:1883
,用户名密码在网站页面上,就是Iot_id(user)
和Iot_pwd(password)
,Client ID随便填,只要唯一就行。
Subcribe界面很简单,就是简单的接收信息。
Publish界面(这些控件都可以自定义):
效果如下:
还是要注意的是延时1s以上才会在网页记录:
注意:关于MQTT QoS,可以看这篇文章,简单来说就是:
- level 0:最多一次的传输
- level 1:至少一次的传输
- level 2: 只有一次的传输
最终效果(画质为啥这么差):
5、进阶展望
自定义服务器,比如ThingsBoard,从而提供更个性化的需求
使用第三方ESP8266固件,如espurna、eps-mqtt、ESP-Link,后者被Arduino Uno Wifi官方采用
使用微信(wxpy)、Server酱、TelegramBot等无人值守聊天机器人来响应请求
DFRobot万物互联大赛第一轮的更多相关文章
- DFRobot万物互联大赛第二轮
前言 最近放在阳台的花草被啥东西给吃了,然后厨房挂在墙上的小虾米也不知道咋的被抓破吃光了(我怀疑是隔隔壁两条泰迪),所以打算做个简单的项目,教训一下偷吃贼.时间比较仓促,内容比较多,能力有比较有限,好 ...
- Postmortem Report 第一轮迭代事后分析报告
一.设想和目标 1.1 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件<BlueZ>是一款全新动作类塔防游戏.与市面上已经存在的塔防游戏不同 ...
- IT运维大会精华回顾 等保2.0时代掌控万物互联
10月24日,由<网络安全和信息化>杂志社.IT运维网联合主办的“2019(第十届)IT运维大会”在北京新世纪日航酒店成功举行. 随着大数据.云计算.物联网.互联网+等快速发展,IT系统架 ...
- 看从小自带BUFF的他,如何用代码降低万物互联的门槛
摘要:3岁下象棋,5岁解方程!他说物联网开发就像打怪玩游戏 本文分享自华为云社区<HDC.Cloud2021 | 华为云IoT开发者:用代码降低万物互联的门槛>,原文作者:华为云头条 . ...
- Google科学家前腾讯副总裁吴军将出席第二届万物互联创新大会
当越来越多的科技产品注入互联网的基因,"万物互联"的模式悄然兴起.第二届万物互联创新大会(B12大会)将于2016-11-13日在杭州市余杭区隆重召开.Google科学家前腾讯副总 ...
- 2016 ASC 移动物联网安全高峰论坛 万物互联时代的安全与隐私
互联网的发展已经迈入了"万物互联"时代.移动设备作为人.物连接的主要入口,让人们享受高效.便利的"互联生活"的同时,也给用户的安全和隐私带来了前所未有的挑战.正 ...
- 时序数据库(TSDB)-为万物互联插上一双翅膀
本文由 网易云发布. 时序数据库(TSDB)是一种特定类型的数据库,主要用来存储时序数据.随着5G技术的不断成熟,物联网技术将会使得万物互联.物联网时代之前只有手机.电脑可以联网,以后所有设备都会联 ...
- 万物互联之~RPC专栏
3.RPC引入 上篇回顾:万物互联之~深入篇 Code:https://github.com/lotapp/BaseCode/tree/master/python/6.net/6.rpc/ 其他专栏最 ...
- 上海市2019年公务员录用考试第一轮首批面试名单(B类)
上海市2019年公务员录用考试第一轮首批面试名单(B类) 2019-03-12 设置字体:大 中 小 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 职位序号 注册编号 1910565 5 ...
随机推荐
- idea热部署设置(复制)
提出问题 IntelliJ IDEA工具如何设置热部署??? 解决问题 我的IDEA的版本是:IntelliJ IDEA 14.0.2 第一步:打开tomcat配置 这里写图片描述 第二步: 这里写图 ...
- php 不重新编译增加openssl扩展
安装openssl和开发包 yum install openssl openssl-devel 跳转到PHP源码下的openssl cd /usr/local/src/php-5.5.27/ext/o ...
- sql server 韩文查询匹配失败
在SQL Server 中查询韩文信息时,没有匹配到对应的信息,检查程序后发现字段类型是nvarchar类型的没有问题, 打开存储过程后找到问题了:原来是拼接后的查询语句存储在一个varchar变量中 ...
- 【bzoj3091】城市旅行 LCT区间合并
题目描述 输入 输出 样例输入 4 5 1 3 2 5 1 2 1 3 2 4 4 2 4 1 2 4 2 3 4 3 1 4 1 4 1 4 样例输出 16/3 6/1 题解 LCT区间合并 前三个 ...
- [国家集训队][bzoj2120] 数颜色 [带修改莫队]
题面: 传送门 思路: 这道题和SDOI2009的HH的项链很像,只是多了一个修改 模板套上去呀 莫队学习请戳这里:莫队 Code: #include<iostream> #include ...
- 企鹅的游戏(penguin)
企鹅的游戏(penguin) 题目描述 Shiva养了一只小企鹅.小企鹅很聪明,她总是帮Shiva和他的好朋友想出很多很好玩的游 戏.其中有一个游戏特别经典,Shiva和他的小伙伴们百玩不厌. 游戏规 ...
- uoj 131/bzoj 4199 [NOI2015]品酒大会 后缀树+树d
题目大意 见uoj131 分析 题目的提示还是很明显的 \(r\)相似就就代表了\(0...r-1\)相似 建出后缀树我们能dfs算出答案 再后缀和更新一下即可 注意 细节挺多的,但数据很良心 不然我 ...
- nslookup命令详解【转】
转自:http://blog.chinaunix.net/uid-28933499-id-3750357.html NSlookup命令的用法 用了域名服务器后,经常要查询域名的解析情况,nslook ...
- linux 通过MD5监控指定路径文件的变动
脚本须知: 1. 运行此脚本的用户必须是root,因为在某些文件所在路径普通用户没有访问权限 2. 源文件和其md5码只要有一方内容有改动,都会导致校验失败,所以校验码的保存就至关重要防止其他人修改, ...
- 三个div向左浮动不在同一行,向右浮动在同一行的解决办法
前几天在写代码的时候发现了一个问题,问题的大致描述如下: 在一个大的div中,同一行有三个小的div,当三个小的div均向左浮动时,会出现换行问题,均向右浮动时却在同一行. 解决这个问题的方法是在:在 ...