测一测现在的温度
我们使用Mongoose OS + esp8266 + DHT11来做。
-
Mongoose OS:一个物联网固件开发框架。官方文档 -
esp8266:ESP8266是一款串口WiFi模块。 -
DHT11:一个温度传感器。 -
固件:可以理解为一个电子产品的操作系统,是硬件最底层的软件。 -
串口:直接看图 可以一次性发送八位的数据,互不干扰,并口传输错误一位就要需要重新发送八位数据,串口传输错误一位只需要重新发送一位。
一、Hello World
-
下载mongoose OS的官方工具mos.exe,双击或是输入命令mos ui 就可以启动它的UI界面。如果它没有启动,打开命令提示符,输入cd c:\mos 然后mos --start-webview=false 。关闭时需要关闭1992端口的服务(不然再次双击打不开ui界面)。 -
用一根数据线(一定是要可以传输数据的数据线,有的线只能充电)连接esp8266,按照自己的需求安装相应的驱动。
安装驱动:1. 右键此电脑->管理->设备管理器->其他设备 黄色感叹号的就是我们需要安装的驱动,安装完成可以在端口中看见设备在哪个端口。 -
打开mos,选择端口和型号,端口和型号按实际情况选择,我用的是esp8266 2m内存的所以选择esp8266 flash 2m。 -
在ui的下面有一行可以输入命令的文本框,输入mos clone https://github.com/mongoose-os-apps/demo-c app1 克隆一个模板。克隆完成后我们可以在对应目录中看到一个app1的文件夹,该目录的src目录下的main.c就是我们的代码,mos.yml是配置文件,描述整个应用。 -
打开main.c,找到 修改为: -
在mos的ui界面中输入mos build 编译代码。 -
漫长的等待后输入 mos flash 将固件刷入。 -
成功后将会每秒输出一句hello world!
二、使用DHT11测温
首先把我们的dht11连接到esp8266上,vcc或+ 连接3v的引脚, GND或- 连GND, DAT或out连IO引脚(IO几要记住,比如我接IO2引脚,待会儿就要去配置成IO2引脚)。
esp8266引脚图:
连接完成后我们只需要对hello world的程序稍作修改:
-
添加依赖: 在mos.yml的libs下添加dht驱动的依赖(这些驱动可以在mongoose官网中找),如果需要rpc服务可以添加rpc依赖。 libs:
- location: https://github.com/mongoose-os-libs/boards
- location: https://github.com/mongoose-os-libs/demo-bundle
- location: https://github.com/mongoose-os-libs/rpc-service-config
- location: https://github.com/mongoose-os-libs/rpc-service-fs
- location: https://github.com/mongoose-os-libs/rpc-uart
- location: https://github.com/mongoose-os-libs/wifi
- location: https://github.com/mongoose-os-libs/dht
-
配置引脚,修改代码: 在mos.yml中添加: config_schema:
- ["app.pin", "i", 2, {title: "GPIO pin a sensor is attached to"}]
main.c: #include "mgos.h"
#include "mgos_dht.h"
static void timer_cb(void *dht) {
LOG(LL_INFO, ("Temperature: %lf", mgos_dht_get_temp(dht)));
}
enum mgos_app_init_result mgos_app_init(void) {
struct mgos_dht *dht = mgos_dht_create(mgos_sys_config_get_app_pin(), DHT11);
mgos_set_timer(1000, true, timer_cb, dht);
return MGOS_APP_INIT_SUCCESS;
}
看似复杂,实际上只有两个重要的函数: mgos_dht_create(mgos_sys_config_get_app_pin(), DHT11); mgos_dht_get_temp(dht) 初始化dht以及获取温度。 -
编译&固件刷入 在mos的ui界面中输入mos build 编译成功后输入mos flash 刷入固件。 -
效果:
|