五、基于alios things的esp32 devkitC学习笔记——驱动DS18B20(失败案例)
1、驱动流程买的是模块化的ds18b20不用自己加电阻,在尝试驱动过程中有试过官方IDF的API也试过aliosthings的API,虽然说失败了,但还是记录一下,整理一下驱动ds18b20的流程首先是对ds18b20的初始化操作,或者说是建立连接的过程。在这里首先设置gpio引脚和为输入输出等gpio配置;然后先拉高总线,再拉低总线480us~960us;随后再拉高总线...
1、驱动流程
买的是模块化的ds18b20不用自己加电阻,在尝试驱动过程中有试过官方IDF的API也试过alios things的API,虽然说失败了,但还是记录一下,整理一下驱动ds18b20的流程
首先是对ds18b20的初始化操作,或者说是建立连接的过程。在这里首先设置gpio引脚和为输入输出等gpio配置;然后先拉高总线,再拉低总线480us~960us;随后再拉高总线,接着识开始检测总线电平,如果总线被再次拉低了则证明通信建立成功。
然后是读入与写入,其中写入主要是写入对ds18b20的控制命令,读入就是读入传感器信息了。读入或者写入时都是先拉低总线1us,然后再将信息一位一位地读取或是设置,每位的读入/写入周期为60us~120us
最后就是对数据的拼接啦
整个流程其实看起来很简单,但是我在第一步建立通信就始终通不过了,在我先拉低再拉高总线,等多久都等不到总线被拉低。尝试过反复换gpio口和换gpio输入输出配置,始终无法解决问题,都开始怀疑是不是元件坏掉了。
2、代码
代码以及思路大部分是参考另一篇esp8266的文章:ESP8266--驱动DS18B20
其中自己改的部分主要集中在建立通信:
uint8_t Ds18b20Init() {
int i;
gpio_config_t temp_cfg = {
GPIO_SEL_19,
GPIO_MODE_INPUT_OUTPUT,
GPIO_PULLUP_DISABLE,
GPIO_PULLDOWN_DISABLE,
GPIO_INTR_DISABLE
};
ESP_ERROR_CHECK(gpio_config(&temp_cfg));
ESP_ERROR_CHECK(gpio_set_level(GPIO_NUM_19, 1));
ets_delay_us(666);
ESP_ERROR_CHECK(gpio_set_level(GPIO_NUM_19, 0));
ets_delay_us(666);
ESP_ERROR_CHECK(gpio_set_level(GPIO_NUM_19, 1));
printf("%d\n", gpio_get_level(GPIO_NUM_19));
while (gpio_get_level(GPIO_NUM_19))
{
ets_delay_us(20);
i++;
if (i > 15){
printf("init failed!\n");
return 0;
}
}
printf("init success!\n");
return 1; //初始化成功
}
其中微秒延时用的是ets_sys.h中的ets_delay_us,这个头文件可以在studio关于esp32的API文件夹里找到
更多推荐
所有评论(0)