.

前言:

本期给大家带来一款精致炫酷的蓝牙土壤温湿度传感器,用于做盆栽呵护类产品.

.

1. 成品展示

淘宝上卖得比较多的主要是下面这种模块,其主要作用是测量土壤电阻(越潮湿,电阻越小;越干燥,电阻越大),同时卖家会提供一个adc电路,该电路有电压比较器,可以根据可调电阻设置比较阈值,从而实现土壤湿度到达某一阈值后,直接输出开关信号,如果后面再接一个继电器电路,则可以做一个简易的自动浇花系统。

我们本次给出的也是采用相同的原理,来实现土壤湿度检测。此外,还加了DHT11温湿度传感器,光敏电阻。综合实现盆栽呵护:

.

2. 原理图解析

如下图,整个系统有蓝牙模块(既做通信,也做MCU),纽扣电池电路,按键和指示灯电路,dht11温湿度传感电路,基于ad采样的土壤湿度监测电路,基于ad采样的光敏电阻电路,以及为了实现低功耗的电源控制电路:

.

3. pcb设计

pcb设计中比较重要的部分是: 土壤湿度检测部分。该部分需要尽可能增大与土壤的接触面积。如下图设计:

此外,采用纽扣电池电路,让整个系统轻量级; 将蓝牙模块的引脚全部引出来,方便做二次开发和调试; 按键用来重置设备; 指示灯用来指示工作状态。

.

4. 嵌入式对外提供接口

4.1 蓝牙广播

1)基本属性:

  • Advertising interval: 200 ms
  • Advertising interval low-power: 1000 ms
  • Advertising broadcast: always on
  • Connection interval: 30 ms

2)广播包 (Advertising Data) 分为:

  • 广播包 (Advertising Data)
  • 响应包 (Scan Response)

注:主机主动扫描的情况下, 发送扫描请求给从机, 从机返回扫描响应数据:

3)广播包数据格式:

每个包都是 31 字节,数据包中分为有效数据(significant)和无效数据(non-significant)两部分。

有效数据部分 包含若干个广播数据单元,称为 AD Structure 。如图所示,AD Structure 的组成是:

  • 长度 Len ,表示这个 AD Structure 的长度(除去 len本身 1)
  • 类型 AD Type 标记这段广播数据代表什么, 比如设备名, uuid 等。
  • 数据 AD data

无效数据部分 广播包的长度必须是 31 个 byte,如果有效数据部分不到 31 自己,剩下的就用 0 补全。这部分的数据是无效的。

对于该设备,我们约定其广播数据格式为:

len kind data 备注
02 01 05 -
06 09 35:31:69:6f:74 name:51iot
10 ff 00:00 保留1
85:81:D7:9D:FF:FF MAC 6 字节地址,大端(顺序-看着舒服的放法)
01 类型-用于标志不同的ble广播格式
pid (6bytes) 产品ID,每个产品一个ID

注:根据name过滤出属于51iot的产品;kind=0xFF的数据放广播响应包,其他放广播包;

.

4.2 蓝牙服务和属性

这里暂时只有一个服务,服务中包含:APP->DEVICE 的具备write能力的数据下行特征;和DEVICE->APP的具备notify能力的数据主动上报特征.其UUID定义如下:

描述 uuid 属性
service 000102030405060708090a0b0c0d1990
PhoneToBle 000102030405060708090a0b0c0d1993 write
BleToPhone 000102030405060708090a0b0c0d1994 notify

.

4.3 数据包格式

5.4.2节主要规范了数据上行和下行的通道,本节主要规范数据应该以怎样的格式在上述通道中传输.首先我们要知道蓝牙上行/下行传输单次不能太长(专业术语叫最小传输单元MTU),一般20字节,我们这里规定是20字节,多了要采用分包机制发送.

1)最小帧长度:

MTU=20 bytes

2)格式:

字段 意义
55 AA
00 版本
cmd 命令(1byte)
data_len 数据长度(1byte)
data 数据
check_sum 校验和(除了check_sum求和对0xff取余)

3)dp:

我们仿照主流物联云平台(涂鸦\阿里\小米等)对一个产品进行的数字化描述方法来对各种物联网产品进行数字化建模.

首先所有数据被划分为以下类型:

注:约定数组最长不超过256字节

这样我们就能够通过下面的方法来定义一个产品(本期的智能盆栽系统):

DP ID 功能点 标识符 数据传输类型 功能点类型 功能点属性 备注 操作
1 环境温湿度检测开关 on_off_th 可下发可上报 布尔型
2 土壤湿度检测开关 on_off_soil 可下发可上报 布尔型
3 亮度检测开关 on_off_light 可下发可上报 布尔型
4 实时温度 temperature 只上报 数值型 数值范围:0-100, 间距:1, 倍数:0, 单位:摄氏度
5 实时湿度 humidity 只上报 数值型 数值范围:0-100, 间距:1, 倍数:0, 单位:%
6 实时突然湿度 soil_humidity 只上报 枚举型 枚举值: very_dry/dry/moist/very_moist
7 实时亮度采集 light 只上报 数值型 数值范围:0-100, 间距:1, 倍数:0, 单位:光强百分比%
7 历史数据上报 history 可下发可上报 RAW型 时间戳4bytes+1字节的温度+1字节的湿度+1字节的土壤湿度+1字节的光强

.

4.4 数据通信模型

4.1~4.3对蓝牙的广播和服务对外提供的接口进行了规范和说明,此时使用常见的蓝牙调试工具(nrf connect/light blue...)都可以来验证我们的硬件设备是否是按照所规范的那样:

.

看上图第1页面,可以看到其广播数据和我们规定的一模一样;看上图第2页面,可以看到其服务和特征也和我们定义的一模一样,图3是我们向智能盆栽设备发送一个dp=1,值为false的数据(表示关闭环境温湿度采集).因此一个APP/微信小程序开发者,可以根据4.1~4.3的规范来开发应用程序,通过广播信息,找到指定蓝牙设备,通过notify和write两个通道,实现与指定蓝牙设备通信.这里我就不多说了,开发者可以根据该款开源硬件开放的接口,自己做各种炫酷的APP~

 

 

 

 

重要


: 如果对该智能盆栽开源硬件感兴趣,可以微信扫码购买样机,自己调试哈
里面还有其它好玩有趣方案,都会以开源的PCB+标准化功能描述接口提供,开发者可以根据自己的技术栈,选择开发不同的上位机程序,做出各种有趣的小智能硬件~

[开源硬件DIY] 自制一款精致炫酷的蓝牙土壤温湿度传感器,用于做盆栽呵护类产品(API开放,开发者可自行DIY微信小程序\安卓IOS应用)的更多相关文章

  1. 一款非常炫酷的jQuery动态随机背景滚动特效

    一款非常炫酷的jQuery动态随机背景滚动特效 图片背景会不停息的滚动,带有那种漂浮的视觉效果,小圈圈飘动. 更好的是还兼容IE6浏览器,大伙可以好好研究研究. 适用浏览器:IE6.IE7.IE8.3 ...

  2. 一款超级炫酷的编辑代码的插件 Power Mode

    今天偶尔发现了一款比较炫酷的插件,想让你们看看效果 打代码的时候会有非常炫酷的效果哟 因为我用的编辑器是VScode,所以我也只搞了搞VSCode中使用Power Mode的方法,如果你用的是别的编辑 ...

  3. 微信小程序开源项目库汇总

    最近做了一个微信小程序开源项目库汇总,里面集合了OpenDigg 上的优质的微信小程序开源项目库,方便移动开发人员便捷的找到自己需要的项目工具等,感兴趣的可以到GitHub上给个star. UI组件 ...

  4. 用Vue.js开发微信小程序:开源框架mpvue解析

    前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...

  5. 微信小程序基础之开源项目库汇总

    awesome-github-wechat-weapp 是由OpenDigg整理并维护的微信小程序开源项目库集合.我们会定期同步OpenDigg上的项目到这里,也欢迎各位提交项目给我们. (链接:ht ...

  6. 零基础开发一款微信小程序商城

    零基础开发一款微信小程序商城 一个朋友问我能不能帮忙做个商城?我一个完整网页都写不出的 菜鸟程序员,我该怎么拒绝呢?好吧,看在小程序这么火的形势下,我还是答应了!找了个开源项目,差不多花了三天时间搞定 ...

  7. 微信小程序< 3 > ~ 微信小程序开源项目合集

    简介 移动开发者想学习微信小程序需要学习一点HTML ,CSS和JS才能够比较快速的上手,参考自己学习Android学习过程,阅读源码是一个很好的方式,所以才收集了一些WeApp的开源项目. awes ...

  8. 开源微信小程序商城测评

    1. Java版 1)微同商城 减少重复造轮子,开源微信小程序商城 .快速搭建一个属于自己的微信小程序商城. 官网地址:https://fly2you.cn 开源地址:https://gitee.co ...

  9. 耗时一个月上架了一款微信小程序,赚了2022年的第一笔副收入

    今天不谈技术,只谈经历. 前戏 相信有很多的程序员都有一个产品梦,希望有一款属于自己产品.毕竟工作中遇到的有些"脑残"的产品经理不是一个两个,最后不得不因为"技术服务于业 ...

随机推荐

  1. Andrew Ng - 深度学习工程师 - Part 2. 改善深层神经网络:超参数调试、正则化以及优化(Week 2. 优化算法)

    ===========第2周 优化算法================ ===2.1 Mini-batch 梯度下降=== epoch: 完整地遍历了一遍整个训练集 ===2.2 理解Mini-bat ...

  2. Tensorflow 中(批量)读取数据的案列分析及TFRecord文件的打包与读取

    内容概要: 单一数据读取方式: 第一种:slice_input_producer() # 返回值可以直接通过 Session.run([images, labels])查看,且第一个参数必须放在列表中 ...

  3. Java操作RockeMQ

    RocketMQ是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给Apache基金会,已经于2016年11月成为 Apache 孵化项目,相信RocketMQ的未来会发挥着越来越大的作用,将 ...

  4. JavaWeb网上图书商城完整项目--day02-21.退出功能的实现

    1.当用户点击退出的时候,跳转到登陆页面 当用户点击退出的时候,需要将session中保存的登陆的用户销毁掉 当用户点击退出的时候,调用UserServlet的quit方法 退出按钮在top.jsp中 ...

  5. 手把手教你使用Python抓取QQ音乐数据(第二弹)

    [一.项目目标] 通过Python爬取QQ音乐数据(一)我们实现了获取 QQ 音乐指定歌手单曲排行指定页数的歌曲的歌名.专辑名.播放链接. 此次我们在之前的基础上获取QQ音乐指定歌曲的歌词及前15个精 ...

  6. css的四种使用方式

    方式一:内联样式 内联样式,也叫行内样式,指的是直接在style属性中添加CSS 示例: <DIV style="display: none;background:red"& ...

  7. jQuery控制倒计时

    1.1 秒杀的倒计时 做秒杀网页总免不了倒计时,但没有很好的服务器,啥资源都没有,只能将部分任务交给浏览器去处理,比如秒杀首页的倒计时,因为真正秒杀是在具体页面,首页只是展示而已,所以误差一点是允许的 ...

  8. Django迁移命令无法生成mysql表

    数据库迁移问题:在执行python manage.py makemigrations迁移命令之后,正常输出并生成迁移文件,但执行python manage.py migrate之后显示,No migr ...

  9. WSL配置高翔vslam环境

    WSL配置高翔vslam环境 步骤: 安装 windows wls 配置 g++ cmake 环境 编译运行一下例子 1. window启用 wsl 前往 "启用或关闭 Windows 功能 ...

  10. (私人收藏)2019WER积木教育机器人赛(普及赛)基础解决方案

    2019WER积木教育机器人赛(普及赛)基础解决方案 含地图.基础解决方案.全部路线的往返.详细规则.视频.搭建方案 EV3;乐高;机器人比赛;能力风暴;WER https://pan.baidu.c ...