mongoose-os读取ds18b20
来源:互联网 发布:java 图片上传非jsp 编辑:程序博客网 时间:2024/06/06 11:42
使用NodeMCU 脚D4(GPIO2),这个脚默认有一个12K的上拉电阻,接淘宝买的ds18b20,可以省略外接一个上拉电阻。
使用timer回调来跳过等待1秒。
后期优化,可以把reset中几百us的等待也改到timer事件。
#include "ds18b20.h"static struct mgos_onewire *ow;static float temp = 0.0;void init_ds18b20(void){ ow = mgos_onewire_create(DATA_DS18B20); if (ow == NULL) { printf("one wire init failed.\n"); } else { printf("one wire init successful.\n"); }}float get_temp(void){ return temp;}// 转换到浮点static float toFloat(uint16_t data){ if (data & 0x8000) return -1 * ((uint16_t)(~data + 1) / 256.0f); else return (data / 256.0f);}//cbstatic void cb_read(void *arg){ if (!mgos_onewire_reset(ow)) { printf("reset for read failed\n"); return; } mgos_onewire_skip(ow); mgos_onewire_write(ow, 0xbe); //read uint8_t data[BYTE_READ]; mgos_onewire_read_bytes(ow, data, BYTE_READ); uint16_t *p_data = (uint16_t *)(data); *p_data &= ~1; *p_data <<= 4; temp = toFloat(*p_data); printf("d0:%d,d1:%d,ds18b20 temp is:%3.1f\n", data[0], data[1], temp); mgos_onewire_reset(ow); (void)arg;}void read_ds18b20(void){ if (mgos_onewire_reset(ow)) { mgos_onewire_skip(ow); mgos_onewire_write(ow, 0x44); //wait mgos_set_timer(1000, false, cb_read, NULL); } else { printf("No ds18b20!\n"); }}
阅读全文
1 0
- mongoose-os读取ds18b20
- Mongoose os读取sht10
- 多路DS18B20读取
- Mongoose OS 的mos命令
- 树莓派3 读取DS18B20 温度
- 读取温度传感器DS18B20的实例
- imx6ul linux读取DS18B20温度
- 突变:mongoose-os的系统配置API改变
- DS18B20温度读取笔记1-复位函数
- DS18B20多ROM搜索并读取温度
- C51单总线操作,读取温度DS18B20
- 树莓派插入DS18B20 无法读取数据解决办法
- STC15F2K60S2读取DS18B20温度串口显示
- Qt加树莓派读取ds18b20温度传感器的值
- ds18b20
- DS18B20
- DS18B20
- DS18B20
- c指针
- 用阿里云国外主机搭建VPN服务
- Mybatis-insert数据返回主键id
- 通用循环队列的实现
- 明明白白你的Linux服务器——安全篇
- mongoose-os读取ds18b20
- Unknown server tag 'asp:Chart'. 最最最简单解决办法。
- IDEA 快捷键(持续更新)
- 织梦调取技巧
- 路虎中DS1协议
- 获取数据库最后一条数据
- python实现12306验证和登录
- C++ 实现反射
- C#访问修饰符总结