如何用MicroPython实现NodeMCU ESP32向Firebase传输数据
用MicroPython在ESP32上传数据到Firebase实时数据库
前置准备
- ESP32已刷入MicroPython固件
- Firebase控制台创建项目,启用实时数据库,设置读写权限(测试阶段可临时设为
{ "rules": { ".read": true, ".write": true } },正式环境需修改为安全规则) - 获取你的Firebase实时数据库URL(格式类似
https://xxx-default-rtdb.firebaseio.com/)和项目API密钥
代码实现步骤
1. 连接WiFi
先编写WiFi连接逻辑,确保ESP32接入网络:
import network import time def connect_wifi(ssid, password): wlan = network.WLAN(network.STA_IF) wlan.active(True) if not wlan.isconnected(): print('Connecting to WiFi...') wlan.connect(ssid, password) while not wlan.isconnected(): time.sleep(0.5) print('WiFi connected. IP:', wlan.ifconfig()[0]) # 替换为你的WiFi信息 connect_wifi("你的WiFi名称", "你的WiFi密码")
2. 上传数据到Firebase
Firebase实时数据库支持REST API,我们用urequests库发送HTTP请求完成上传。部分MicroPython固件已内置该库,若没有可通过Thonny或mpremote安装。
以下是传感器数据上传的示例代码:
import urequests import time # 替换为你的Firebase信息 FIREBASE_DB_URL = "https://xxx-default-rtdb.firebaseio.com/" FIREBASE_API_KEY = "你的项目API密钥" def upload_to_firebase(sensor_data): # 自定义上传节点,这里用"sensor_data"作为示例 url = f"{FIREBASE_DB_URL}/sensor_data.json?auth={FIREBASE_API_KEY}" try: # PUT请求会覆盖节点数据,POST请求会生成带自动ID的新条目,按需选择 response = urequests.put(url, json=sensor_data) print("Upload success. Response:", response.text) response.close() return True except Exception as e: print("Upload failed:", str(e)) return False # 模拟传感器数据(替换为你的实际传感器读取逻辑) def read_sensor(): return { "temperature": 25.6, "humidity": 60.2, "timestamp": time.time() } # 循环上传数据 while True: data = read_sensor() upload_to_firebase(data) time.sleep(5) # 每5秒上传一次
关键说明
- 请求方式:
PUT用于覆盖指定节点数据,适合更新同一份数据;POST会在节点下生成新的自动ID条目,适合存储时序类数据。 - 安全规则:测试完成后务必修改Firebase实时数据库的安全规则,禁止公开读写,可配置为仅认证用户访问或基于特定条件的权限。
- 异常处理:实际部署时需补充WiFi重连、请求超时等异常处理逻辑,提升稳定性。
- 库依赖:若固件无
urequests,可手动将urequests.py文件上传至ESP32,或通过Thonny的包管理器安装。
内容的提问来源于stack exchange,提问作者Keyboard's_Slave
相关产品推荐
相关产品推荐

