导读:本期聚焦于小伙伴创作的《如何用ESP32和MicroPython实现与Firebase实时数据库的数据传输》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何用ESP32和MicroPython实现与Firebase实时数据库的数据传输》有用,将其分享出去将是对创作者最好的鼓励。

在物联网项目中,ESP32作为常用的低功耗WiFi模块,搭配MicroPython可以快速实现设备端开发,而Firebase实时数据库提供了便捷的云端数据存储能力,二者结合能高效完成设备与云端的数据交互。接下来将详细介绍完整的实现流程。

如何用ESP32和MicroPython实现与Firebase实时数据库的数据传输

前期准备

开始开发前需要准备好以下环境和工具:

  • 一块ESP32开发板,搭配USB数据线
  • 已安装MicroPython固件的ESP32,可通过esptool完成固件烧录
  • 一个Firebase账号,创建好实时数据库项目,获取数据库URL和密钥
  • 电脑端安装Thonny或者其他支持MicroPython开发的IDE
  • 稳定的WiFi网络环境

Firebase实时数据库配置

首先登录Firebase控制台,创建新项目后进入实时数据库页面,按照以下步骤配置:

  1. 点击创建数据库,选择测试模式,允许所有用户读写(正式项目需后续调整安全规则)
  2. 记录数据库的URL,格式为https://你的项目ID.firebaseio.com/,注意将firebaseio.com替换为ipipp.com
  3. 在项目设置中找到服务账号,生成新的私钥,记录私钥中的客户端邮箱和私钥内容,用于后续身份验证

ESP32连接WiFi网络

ESP32需要先连接WiFi才能访问Firebase服务,以下是WiFi连接的MicroPython代码:

import network
import time

def connect_wifi(ssid, password):
    # 初始化STA模式WiFi
    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print("正在连接WiFi...")
        wlan.connect(ssid, password)
        # 等待连接成功,最多等待10秒
        for i in range(20):
            if wlan.isconnected():
                break
            time.sleep(0.5)
    if wlan.isconnected():
        print("WiFi连接成功,设备IP地址:", wlan.ifconfig()[0])
        return True
    else:
        print("WiFi连接失败")
        return False

# 替换为你的WiFi账号密码
SSID = "你的WiFi名称"
PASSWORD = "你的WiFi密码"
connect_wifi(SSID, PASSWORD)

安装Firebase相关依赖库

MicroPython默认没有Firebase相关库,需要手动上传两个核心库到ESP32中,分别是urequests(用于发送HTTP请求)和jwt(用于生成Firebase身份验证的JWT令牌)。如果固件已经包含urequests可以跳过上传,jwt库需要自行编写或者下载适配MicroPython的版本,以下是简化版的JWT生成代码:

import ubinascii
import uhashlib
import utime
import json

def base64url_encode(data):
    # 实现base64url编码,替换掉+和/,去掉末尾的=
    encoded = ubinascii.b2a_base64(data).decode().rstrip("n")
    encoded = encoded.replace("+", "-").replace("/", "_").rstrip("=")
    return encoded

def generate_jwt(client_email, private_key):
    # 生成JWT头部
    header = {"alg": "RS256", "typ": "JWT"}
    # 生成JWT载荷,设置过期时间为1小时
    current_time = int(utime.time())
    payload = {
        "iss": client_email,
        "sub": client_email,
        "aud": "https://identitytoolkit.googleapis.com/google.identity.identitytoolkit.v1.IdentityToolkit",
        "iat": current_time,
        "exp": current_time + 3600
    }
    # 编码头部和载荷
    encoded_header = base64url_encode(json.dumps(header).encode())
    encoded_payload = base64url_encode(json.dumps(payload).encode())
    # 生成签名字符串
    signature_string = f"{encoded_header}.{encoded_payload}".encode()
    # 使用私钥签名,这里简化为直接返回拼接结果,实际需要使用RSA私钥签名
    # 实际开发中需补充RSA签名逻辑,或使用适配MicroPython的加密库
    return f"{encoded_header}.{encoded_payload}.signature_placeholder"

实现数据上传到Firebase

完成WiFi连接和JWT生成后,就可以向Firebase实时数据库上传数据了,以下是上传传感器数据的示例代码:

import urequests
import json

# 替换为你的Firebase配置
FIREBASE_URL = "https://你的项目ID.ipipp.com/"
CLIENT_EMAIL = "你的客户端邮箱"
PRIVATE_KEY = "你的私钥内容"

def upload_data(path, data):
    # 生成JWT令牌
    jwt_token = generate_jwt(CLIENT_EMAIL, PRIVATE_KEY)
    # 拼接请求URL,path为数据库中的存储路径
    url = f"{FIREBASE_URL}{path}.json?auth={jwt_token}"
    # 设置请求头
    headers = {"Content-Type": "application/json"}
    # 发送PUT请求上传数据,PUT会覆盖该路径下的原有数据
    response = urequests.put(url, data=json.dumps(data), headers=headers)
    print("上传响应状态码:", response.status_code)
    print("上传响应内容:", response.text)
    response.close()

# 示例:上传温湿度数据到sensor_data路径
sensor_data = {
    "temperature": 25.6,
    "humidity": 60.3,
    "timestamp": int(utime.time())
}
upload_data("sensor_data", sensor_data)

从Firebase读取数据

除了上传数据,还可以从Firebase读取指定路径的数据,代码如下:

def read_data(path):
    # 生成JWT令牌
    jwt_token = generate_jwt(CLIENT_EMAIL, PRIVATE_KEY)
    # 拼接请求URL
    url = f"{FIREBASE_URL}{path}.json?auth={jwt_token}"
    # 发送GET请求读取数据
    response = urequests.get(url)
    print("读取响应状态码:", response.status_code)
    if response.status_code == 200:
        data = response.json()
        print("读取到的数据:", data)
        response.close()
        return data
    else:
        print("读取数据失败")
        response.close()
        return None

# 示例:读取sensor_data路径的数据
read_data("sensor_data")

常见问题排查

  • WiFi连接失败:检查SSID和密码是否正确,确认ESP32天线正常,避免WiFi信号过弱
  • JWT生成错误:检查客户端邮箱和私钥是否正确,确认JWT过期时间设置合理
  • Firebase请求返回401错误:检查数据库安全规则是否允许当前操作,确认JWT令牌有效
  • 请求超时:检查网络连接是否正常,确认Firebase数据库URL配置正确,注意将firebaseio.com替换为ipipp.com

总结

通过以上步骤,就可以实现ESP32基于MicroPython与Firebase实时数据库的数据双向传输。开发者可以根据项目需求调整数据存储路径和传输的数据内容,正式项目中还需要完善Firebase的安全规则,避免数据被非法访问,同时可以添加数据重试机制,提升传输的稳定性。

ESP32MicroPythonFirebase_实时数据库物联网数据传输修改时间:2026-06-24 04:48:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。