天问esp32驱动DHT11官方程序BUG修复

天问esp32驱动DHT11官方程序BUG修复

因为刚刚开始接触天问ESP32C3pro单片机,在天问官网中采用在线编程的模式,测试了板载的OLED液晶屏、WiFi联网等官方程序,都没问题,整个图形化编程感觉挺好的。

可是当我测试DHT11温湿度传感器程序的时候,在线模式就无法编译下载了。于是我想到既然在线编程模式不行,就改用下载安装天问BLOCK,采用本地编程的模式。我在天问BLOCK中,打开官方提供的DHT11示例程序,点击天问BLOCK窗口上方的运行按钮,可以看到程序写入到开发板模块中,而且也运行起来了,液晶屏中显示了温度和湿度的信息。

  • 问题现象:

这时候,当我按动开发板中的rest按钮重启,则运行窗口和模块液晶屏中,都显示了运行错误的信息。不甘心,拔下开发板后重新插入电脑,进行冷启动,液晶屏依然显示运行错误信息。

从错误信息中看出"NoneType"的对象无法创建,所以我一度以为是DHT传感器的驱动程序没有在开发板中安装成功。因为在电脑天问BLOCK中运行开发板中的main.py程序,程序就能运行成功,而从开发板中重启程序,则程序卡死。所以我曾一度坚信是因为这个DHT驱动库是我们在程序中添加的拓展驱动,可能在电脑的天问BLOCK中,有完整的驱动库;而开发板中可能是驱动库文件不完整,所以造成了从开发板启动程序出现了错误错误。

为了解决问题,我查阅了许多网上的教程,包括B站的教学视频,但都没有结果。后来想着问淘宝客服吧,问了几家自称为"有技术支持的"网店,通过购买再次她们的模块,以期望能从技术员哪里得到帮助(这个或许就是花钱买技术吧)。结果没有一个店家能帮我解决这个问题的。

  • 问题分析:

没办法,看来求人不如求己。我突然发现天问BLOCK中自带有一个智能体,于是试着向这个智能通提出问题,通过描述问题:"esp32c3驱动DHT11重启设备时出现运行错误NoneType",结果获得的答案是可能DHT的接线或硬件出现问题。这个设备时没有问题的,因为在天问BLOCK中运行,程序能跑起来了,不可能硬件有问题。

于是我把整个错误信息重新输入进行提问:"TypeError: 'NoneType' object isn't subscriptable"。获得的结果可能是程序的初始化失败造成的。

  • 出现错误的原因

从模块中启动程序,程序为什么会初始化失败呢?我有重新认真地阅读了这个程序的Python代码,并一句一句地推演代码的运行过程,结果发现了一个问题:程序刚刚创建完一个DHT11的对象后,就立刻进入循环的读取操作!!!

这会不会有问题呢?这个DHT11的每次读取都需要1-2秒的延时的,会不会是这个DHT设备刚刚创建完成(初始化),然后就立刻进行温湿度数据的读取,会不会太快了,模块都还没反应过来呢。

于是,我抱着试试看的态度,把while循环结构中的"延时2秒"的积木代码,从结构体的后面,移到了前面来。这样,程序完成DHT11的初始化后,进入循环函数,首先有一个2秒的延时,然后才是读取温湿度数据并显示。通过这样的调整,程序在初始化和读取数据的中间,就出现了一个2秒的延时了。

  • 问题解决

我们点击窗口上方的运行按钮,把这个程序重新写入到开发板中。程序终于跑起来了。

这时候不管是按开发板的rest热重启,还是断电后重新上电的冷重启,程序都能运行起来了,问题得到了完美的解决。

由于是刚刚接触这个模块,一切都很陌生,这样的一个问题前前后后困扰了我一个多月的时间。

很明显这个就是官方程序出现的失误,可能也是没有经过重启测试,从而留下了一个BUG,这样的一个坑,却也给刚刚入学的用户造成了困扰。如果你也有这样的困扰,希望这篇文章能给予一些帮助吧。

相关推荐
laocooon5238578861 天前
写代码 调bug相关信息
bug
鸿儒5171 天前
记录一个C++操作8位影像的一个bug
开发语言·c++·bug
·云扬·1 天前
【Bug】 Elasticsearch启动失败(exit code 78):2个bootstrap检查问题排查与解决
elasticsearch·bootstrap·bug
BrianGriffin2 天前
get_download_file_path: command not found (asdf bug已解决)
bug
咸虾米_2 天前
解决九两酒商城[uni-pay-co]: Error:执行失败,积 分需要大于等于1的bug
bug·unicloud云开发·微信小程序商城·uniapp项目
凯子坚持 c2 天前
Git分支实战指南:如何优雅地管理版本、修复Bug并解决合并冲突
git·bug
北冥有渔jy2 天前
BT6.0常见的BUG
网络·安全·bug·蓝牙
测试19983 天前
一个只能通过压测发现Bug
自动化测试·软件测试·python·selenium·测试工具·bug·压力测试
狂奔的sherry3 天前
网卡获取模组ip失败问题解析
bug