树莓派LCD显示BME280传感器数据报错:变量temperatura未定义
解决BME280传感器数据显示的NameError问题
错误原因
screen.py中尝试直接调用temperatura变量,但该变量是bme280_sensor.py里update_sensor_data函数内声明的模块内部全局变量,无法跨模块直接访问,因此抛出NameError: name 'temperatura' is not defined。
解决方案
方案一:使用函数返回的字典数据(推荐)
直接利用update_sensor_data函数返回的字典获取温度值,无需依赖全局变量,代码更健壮:
修改screen.py的循环部分:
while(True): sensor_data = update_sensor_data() mylcd.lcd_display_string("Temp: %d%sC" % (sensor_data['temperatura'], chr(223)), 1) sleep(1)
方案二:暴露模块级全局变量
如果一定要用全局变量的方式,需要先在bme280_sensor.py中把temperatura定义为模块级变量:
# 在文件中bme280.load_calibration_params之后添加初始化 temperatura = 0.0 def update_sensor_data(): global temperatura bme280_data = bme280.sample(bus,address) temperatura = round(bme280_data.temperature) data = { 'humitat': round(bme280_data.humidity), 'pressio': round(bme280_data.pressure), 'temperatura': temperatura } return data
然后在screen.py中导入该变量:
from bme280_sensor import update_sensor_data, temperatura
之后就能在循环中正常使用temperatura变量。
内容的提问来源于stack exchange,提问作者Tridox25
相关产品推荐
相关产品推荐

