天问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,这样的一个坑,却也给刚刚入学的用户造成了困扰。如果你也有这样的困扰,希望这篇文章能给予一些帮助吧。
