完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
ESP8266是具有集成 WiFi 芯片组和 TCP/IP 堆栈的 32 位微控制器。闪存通过 SPI 连接。在将 GPIO0 接地启动后,可以通过串行端口进行固件升级。一个基于 GCC 的工具链是可用的。这导致了一些替代固件(库存固件提供 AT 命令以将 ESP8266 用作 wifi 模块)。对于我们的物联网传感器(流行词宾果游戏!),我们将使用nodemcu. 它将允许我们在 lua 脚本中为 MCU 编写代码。EPS8266 可以有不同的变体。我正在使用 ESP12,因为它具有用于大多数 MCU 引脚的接头。我的被焊接到 PCB 上(在 eBay 上作为捆绑包购买),以使接口更容易。PCB 还上拉 CH_PD,这是启动 ESP 所必需的:电路要求 GPIO0 和 GPIO2 上的两个 4,7k 上拉电阻可防止从深度睡眠返回时出现“僵尸”模式。GPIO16 必须与 RST(右侧的橙色线)连接在一起,并拉高。深度睡眠是通过运行一个内部定时器来实现的,该定时器将重置(!)ESP 以退出睡眠模式。如果没有这种接线,来自 nodemcu 的 node.dsleep() 将无法工作。
由于 ESP 需要 3,3v,升压转换器将从两节 NiMH 电池提供该电压。确保使用 3.3V 电平的 USB/串行 TTL 转换器。网上有报道说有人用 5V 电平炸过这个芯片。 MS-5611 传感器通信 MS-5611 传感器将为我们提供压力和温度读数。数据表可在此处找到。我正在使用来自中国 eBay 卖家的 GY-63。它为 I2C 提供标头: I2C 通信很简单。Nodemcu 提供 i2c 支持。根据焊桥,它会在 0x76 或 0x77(gy63 上的默认值)上进行通信。0x1e 将复位芯片,之后可以从 0xa2 开始收集 6 个字的工厂校准 eprom 数据。写入 0x00 并稍等片刻后,可以从 0x48(D1,压力)和 0x50(D2,温度)采样 3 个字节的 A/D 数据。此示波器屏幕截图显示了温度响应: 数据表中指定了根据 A/D 数据计算传感器值的公式。nodemcu 允许我们在 lua 中 1:1 使用它:dT = D2 - caldata[5]*2^8 TEMP = 2000 + dT * caldata[6] / 2 ^ 23 OFF = caldata[2] * 2 ^ 16 + ( caldata[4] * dT)/2^7 SENS = caldata[1] * 2 ^ 15 + (caldata[3] * dT)/2^8 P = (D1 * SENS / 2^21 - OFF)/2^15 找到完整的 lua 片段。“read_pressure(dev_addr) 和 read_temp(dev_addr) 将为您提供传感器数据。不要忘记在文件中指定正确的引脚。请注意,引脚编号与 GPIOx 不对应。映射表可以在nodemcu README中找到。MQTT 发布 Nodemcu 也为我们提供了 MQTT 支持。请注意,对于 nodemcu 固件版本 20150127 及更高版本,您需要支持版本 3.1.1 的代理。在我们的示例中使用它很简单:m:publish("sensors/".. CLIENTID .. "/temperature",read_temp(i2c_addr),0,0, function(conn) print ("temp published") m:publish("sensors/".. CLIENTID .. "/pressure",read_pressure(i2c_addr),0,0, function(conn) print ("pressure published") node.dsleep(60*1000000) end) end) 请注意回调函数。nodemcu 需要运行后台任务。因此我们不能使用阻塞函数,而需要依赖回调。第二次发布的回调将使 ESP 进入深度睡眠。整个代码可以在这里找到。另外值得一提的是“dofile(“baro.lc”) 调用。我必须(使用“node.compile('baro.lua')”)将 baro.lua 代码编译成 .lc 文件。这将节省堆空间(以及每次唤醒期间的指令)。使用非编译版本时,由于堆空间不足,第二次 MQTT 发布无法正常工作。 自动启动 由于深度睡眠会在唤醒时重置 ESP,并且我们还希望我们的代码在开机时自动启动,因此我们需要一个“init.lua”文件来让事情顺利进行。你可以在这里找到它。不是直接调用mqtt.lua代码,而是设置一个定时器。这给了我们三秒钟来中断“自动启动”,这在开发过程中非常有用(或更改 SSID 设置)。第二个计时器确保我们在 15 秒后进入深度睡眠。如果 mqtt 发布由于任何原因(例如连接错误)不会回调,这将启动。在启动后立即清除计时器 0 和 1 将为您提供一个 lua shell。 为了方便开发,您可以使用基于 Java 的ESPlorer 工具: 它允许轻松上传文件,并提供用于计时器重置等命令的按钮。非常推荐。 MQTT 代理 Mosquitto 项目为我们提供了 3.1.1 版本的消息代理。Debian wheezy 上的库存软件包还不支持 3.1.1。按照这些说明配置 mosquitto 存储库。 连接ago 控制 几行 python 连同 agoclient 和paho mqtt 客户端模块将 MQTT 消息桥接到 ago 控制。您可以在此处找到示例代码。agoMQTT.py 的调试输出: 2015-03-01 18:52:35,003 AgoMQTT INFO Received MQTT message on topic sensors/ESP8266-10316383/pressure: 970.11159829194 比如根据传感器值触发动作。结论 虽然市场上有很多 Wifi 模块,但 ESP8266 有一些好处。它非常便宜,它有一个工具链和强大的固件。与 MQTT 和前控制一起,构建强大的物联网(流行语宾果游戏!再次)设备非常容易。我将在接下来的几天测量功耗。代码需要清理,仍有一些降低功耗的潜力。应该编译“mqtt.lua”。删除调试语句也将节省一些周期。欢迎评论。 |
|
|
|
只有小组成员才能发言,加入小组>>
3278 浏览 9 评论
2955 浏览 16 评论
3455 浏览 1 评论
8987 浏览 16 评论
4050 浏览 18 评论
1102浏览 3评论
570浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
568浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2301浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1857浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 10:10 , Processed in 1.181646 second(s), Total 81, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号