首页 > 其他分享 >基于 ESPHome 的 3D 打印机舱内控制系统(1): 荆棘满途之 FireBeetle 2 ESP32-C6 初始配置

基于 ESPHome 的 3D 打印机舱内控制系统(1): 荆棘满途之 FireBeetle 2 ESP32-C6 初始配置

时间:2024-04-23 14:47:57浏览次数:27  
标签:ESP32 荆棘满途 esphome ESPHome https 固件 C6

前言

开一个新坑,谋划了很久,最初是为了测试 Moonraker 的 Sensor 组件,逐步扩展到设计一个完整的控制系统。硬件选择 ESP 系列芯片,功能足够,还支持 WiFi/BT。软件看了一圈选择 ESPHome,轻代码,功能强大配置简单易上手。

本文涉及的硬件:

  • DFRobor FireBeetle2 ESP32-C6 迷你开发板

本文涉及的软件:

  • ESPHome 2024.3.2 -> 2024.4.1(写作过程中已发布新版)
  • Windows11 with WSL2(Debian Bookworm)

本文涉及的问题:

  • ESPHome 和 PlatformIO 的基本命令
  • ESPHome 正确支持 ESP32-C6
  • C6 点灯测试
  • 使用 external_components 修复 logger
  • 修复报错 Refusing to overwrite
  • WSL2 连接 USB 设备

1、文档资料

1.1 FireBeetle 2 硬件规格

【图 FireBeetle 2 ESP32 C6开发板】

我们感兴趣的硬件特性总结如下:

  • 搭载 ESP32-C6 芯片(160MHz的高性能 RISC-V 32位单核处理器)支持 2.4 Ghz WiFi 6、Bluetooth 5、Zigbee 3.0、Thread 1.3 通讯协议

    • 主频:160 MHz
    • SRAM:512KB
    • ROM:320KB
    • Flash:4MB
  • 支持太阳能充电, 免电源线部署

  • 电池电压检测引脚 IO0,和充电指示灯

    • 熄灭:未接入电源或已充满
    • 常亮:充电中
    • 闪烁:电池未接入
  • 板载GDI接口,轻松连接屏幕

  • PH2.0电池接口,方便连接电池

  • IO15/D13:板载LED引脚

  • RST:复位按键

  • IO9/D9/BOOT:IO引脚/BOOT按键

  • CN3165: 太阳能充电芯片

1.2 ESPHome 介绍与优点

  1. 项目主页:https://esphome.io/,默认支持 ESP32/ESP8266/RP2040/BK72XX/RTL87XX
  2. 支持的硬件列表:由于使用 PlatformIO 进行编译,所以和 PIO 的支持列表相同: PIO Registry Platform

ESPHome is a system to control your microcontrollers by simple yet powerful configuration files and control them remotely through Home Automation systems.

ESPHome 使用配置文件来控制微控制器,旨在和家庭自动化控制系统(如 HomeAssistant 等)结合使用。它使用和配置简单,和 HA 语法基本一致,功能强大,支持多种模块,无需复杂的编程知识即可实现各种功能。

类似的还有 Tasmota/ESPEasy 等项目,相比之下 Tasmota 可以实现在固件中进行设置修改,但是支持的主控芯片与模块不如 ESPHome 多,使用流程也不像 ESPHome 那样提供一揽子方案。ESPHome 使用 PlatformIO 作为底层进行固件编译,所以支持非常多的设备。

2、安装使用 ESPHome(理想版)

为了防止劝退新手,先公布答案走一遍流程。以下使用 WSL2-Debian Bookworm。

## 安装配置 ESPHome
sudo apt-get install python3-venv
cd ~ && python3 -m venv esphome-env
source ~/esphome-env/bin/activate
pip3 install -U pip
pip3 install -U esphome
# 查看 esphome 软件版本
esphome version
# 创建配置文件目录
mkdir ~/esphome_config

## 使用向导创建配置文件
esphome wizard firebeetle2-esp32c6-demo.yaml
## 也可以使用 esphome dashboard 网页面板创建,后面是配置目录
# esphome dashboard ~/esphome_config

# 退出 Python 虚拟环境
deactivate

image-20240423141715089

2.1 为 ESP32-C6 编译 EPSHome 固件

查看 esphome 官方代码,已经支持 esp32c6 芯片了,再继续搜索,找到最新的一次提交:Fix logger compile error on ESP32-C6,发现需要指定使用新版的 Platformio(ESP32-C6 需要 PIO 版本最低为 6.4,目前最新为 6.6),但是目前配置文件创建向导 wizard 还不直接支持,因此我们可以选一个相近的同样采用 RISC-V 核心的 ESP32-C3,然后手动修改,配置如下:

esphome:
  name: firebeetle2-esp32c6-demo

esp32:
  board: esp32-c6-devkitc-1
  variant: esp32c6
  flash_size: 4MB
  framework:
    type: esp-idf
    version: 5.2.1 # 默认为 esp-idf 5.1.2 + PIO 6.5.0
    platform_version: 6.6.0 # at least 6.4 for ESP32-C6

ota:
  password: ""

wifi:
  ssid: [ssid]
  password: [password]

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Firebeetle2-Esp32C6-Demo"
    password: "F4Qwm19jxEKj"

captive_portal:

然后可以使用命令或者 Dashboard 网页烧录固件。

# 一键命令编译烧录固件,ESP32 RISC-V 的工具链还是比较大的
esphome run firebeetle2-esp32c6-demo.yaml
# - Validates the configuration | 验证配置文件
# - Compiles a firmware | 编译固件
# - Uploads the firmware (over OTA or USB) | 上传固件(OTA 或者 USB)
# - Starts the log view | 开启日志查看

## 其他相关命令
# 验证配置文件并编译生成固件
esphome compile firebeetle2-esp32c6-demo.yaml
# 验证配置文件并上传最近一次编译的固件(USB首次上传需要进入烧录模式)
esphome upload firebeetle2-esp32c6-demo.yaml -d [/dev/serial_path]
esphome upload firebeetle2-esp32c6-demo.yaml --host-port [IP_ADDRESS]

更多命令参考:Command Line Interface — ESPHome,可以看到整体使用还是很简单的。

2.2 Hello World Via Onboard LED

一切的开始都是一盏灯,根据 DFRobot 的产品介绍,FireBeetle 2 有个板载LED,连接 GPIO15,我们使用 Light 组件。在上述配置文件中添加下述内容,重新编译上传,此时可选 OTA 无线升级。

# 定义一个状态灯
light:
  # 板载 LED灯
  - platform: status_led
    name: "Switch state"
    pin: GPIO15

3、使用 ESPHome(现实版)

3.1 支持 ESP32-C6

查询 PIO 设备支持列表,搜索 ESP32 C6,接近的有两个,esp32-c6-devkitc-1 和 esp32-c6-devkitm-1,和前者更接近,注意 Flash 为 4MiB。

Name MCU Frequency RAM Flash Frameworks Debug
Espressif ESP32-C6-DevKitC-1 ESP32C6 160 MHz 512 KiB 8 MiB espidf
Espressif ESP32-C6-DevKitM-1 ESP32C6 160 MHz 320 KiB 4 MiB espidf External

但是无论我们使用 Wizard 向导选择 esp32-c6-devkitc-1 还是 esp32-c6-devkitm-1 作为模板,都无法创建,提示:

Processing firebeetle2-esp32c6-demo (board: esp32-c6-devkitc-1; framework: espidf; platform: platformio/[email protected]) UnknownBoard: Unknown board ID 'esp32-c6-devkitc-1'

查看 esphome 官方代码,已经支持 esp32c6 芯片了,再继续搜索,找到最新的一次提交:Fix logger compile error on ESP32-C6,发现需要指定使用新版的 Platformio(ESP32-C6 需要 PIO 版本最低为 6.4,目前最新为 6.6),但是目前配置文件创建向导 wizard 还不直接支持,因此我们可以选一个相近的同样采用 RISC-V 核心的 ESP32-C3,然后手动修改,配置如上文。关于 ESP32 Platform 的介绍:

  • platform_version (Optional, string): The version of the platformio/espressif32 package to use.
  • version (Optional, string): The base framework version number to use, from ESP32 arduino releases. Defaults to recommended. Additional values are:

当前工具链版本如下, 可以看到使用的版本为4.4.6:

HARDWARE: ESP32C6 160MHz, 512KB RAM, 8MB Flash
 - framework-espidf @ 3.40406.240122 (4.4.6)
 - tool-cmake @ 3.16.4
 - tool-ninja @ 1.7.1
 - tool-riscv32-esp-elf-gdb @ 12.1.0+20221002
 - tool-xtensa-esp-elf-gdb @ 12.1.0+20221002
 - toolchain-esp32ulp @ 2.35.0-20220830
 - toolchain-riscv32-esp @ 13.2.0+20230928

查看 ESP-IDF 版本:https://registry.platformio.org/tools/platformio/framework-espidf/versions

3.2 修复 logger 组件

当使用 ESP-IDF 5.1.2 和 PIO 6.5.0 时编译通过,但是升级到最新的 5.2.1 和 6.6.0 后,报错 logger uart。有人遇到相似的情况,具体见 ESPHome PR#6487:Fix uart to work with new enum definition in esp-idf-v5.2.1

由于此 PR 还未被合并到官方仓库,我们可以借用 external_components 来支持,详细的用法请移步:https://esphome.io/components/external_components.html

# Enable logging
logger:

external_components:
  - source:
      type: git
      url: https://github.com/luar123/esphome
      ref: fix_logger
    components: [ logger ]

3.3 报错 Refusing to overwrite

编译固件时报错:

A fatal error occurred: Contents of segment at SHA256 digest offset 0xb0 are not all zero. Refusing to overwrite.

cd /home/pi/esphome_config/.esphome/build/firebeetle2-esp32c6-demo/
pio run -t menuconfig
# 修改 Serial flasher config 的 Flash size 为 4MB

## 其他
# ESP32 的编译工具链较大,约数G,必要时可以挂代理。
# 查看已安装包
pio pkg list
# 查询无用 PIO 数据
pio system prune --dry-run
# 清理无用 PIO 数据
pio system prune

image-20240423133415037

3.4 WSL2 使用 USB 设备

这部分可以参考微软官方文档:WSL 连接 USB 设备

如果使用物理机编译上传固件直接连接即可,但是由于我使用的是 Windows11 + WSL2(使用 WSL2 Distro Manager + Docker Hub Debian Bookworm 镜像),如果想要给 ESP32-C6 烧录固件,需要转发宿主机的 USB 使用,和我们常用的方式不同,不需要在客户机上安装 usbip。以下宿主机称为 host,wsl 称为 wsl。方法如下:

## host 安装 usbip
# 可以从此处下载并安装:https://github.moeyy.xyz/https://github.com/dorssel/usbipd-win/releases/download/v4.1.0/usbipd-win_4.1.0.msi

## host 更新 wsl 内核,重启生效,以下于 PowerShell 中运行
wsl --update --inbox
wsl --shutdown

# host 查看可用 USB 设备并进行转发
usbipd list
usbipd bind --busid 3-1
usbipd list # 验证已转发共享 (Shared)
usbipd detach --busid <busid> # 断开 USB 设备

image-20240423134305112

接下来我们再配置 wsl,由于我用的精简版 Debian,需要进行一些额外的安装设置:

## 【WSL2 Debian】加速 git,使用国内镜像
cat << _EOF_ > $HOME/.gitconfig
[url "https://github.moeyy.xyz/https://github.com/"]
#[url "https://hub.0z.gs/"]
        insteadOf = https://github.com/
_EOF_

## 【WSL2】设置 locale,选择 97,314,具体移步 https://wiki.debian.org/Locale
sudo apt install locales usbutils
sudo dpkg-reconfigure locales

## 【WSL2】设置当前用户(pi)的串口设备读写权限,重新登录生效,注意填写正确的串口设备号
sudo usermod -a -G dialout pi
sudo chown -R root:dialout /dev/ttyACM0
sudo chmod 664 /dev/ttyACM0

4、小结

至此我们可以正常使用 ESPHome 为 ESP32-C6 编译固件,后续可以测试板载蓝牙、使用 IO0 读取电池电压等功能。

标签:ESP32,荆棘满途,esphome,ESPHome,https,固件,C6
From: https://www.cnblogs.com/sjqlwy/p/18152825/esphome_c6_1

相关文章

  • 微雪 esp32c3 墨水屏显示 demo
    先看esp32c3使用platformio开发墨水屏简介这篇文章,这篇文章中详细说明了从创建项目到烧录代码的整个过程。如果屏幕使用的是H029A01型号能够局部刷新,屏幕驱动关键代码为:GxEPD2_BW<GxEPD2_290,GxEPD2_290::HEIGHT>display(GxEPD2_290(SS,5,2,3));(微雪esp32c3)在使......
  • 【Nano Framework ESP32篇】WS2812 彩色灯带实验
    地球人皆知,许多物联网教程作者的心中都深爱着一灯大师,所以第一个例程总喜欢点灯,高级一点的会来个“一闪一闪亮晶晶”。老周今天要扯的也是和灯有关的,但不单纯地点个灯,那样实在不好玩,缺乏乐趣。老周打算舞个龙灯,哦不,是用LED彩色灯带给伙伴们整点炫酷乐子。说到这LED彩灯,咱们常见......
  • 4-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK-设备作为TCP客户端,实现上位机
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节设备作为TCP客户端,连接上位......
  • 【Nano Framework ESP32 篇】刷入 nanoCLR 固件以及相关问题
    老周在几个世纪前曾写过树莓派相关的iOT水文,之所以没写NanoFramework相关的内容,是因为那时候这货还不成熟,可玩性不高。不过,这货现在已经相对完善,老周都把它用在项目上了——第一个是自制的智能插座,这个某宝上50多块可以买到,搜“esp32插座”就能找到。一种是86型盒子的,带屏......
  • 3-WIFI&蓝牙(ESP32)转CAN或RS485总线&串口TTL模块-CSDK--设备作为TCP服务器,实现上位
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明这节设备作为TCP服务器,上位机T......
  • ESP32 Arduino开发 MQTT
    ESP32Arduino开发MQTT目录ESP32Arduino开发MQTT1.安装程序库2.编写相关程序2.1.引入头文件2.2.定义MQTT相关参数2.3.创建对象2.4.连接网络2.5.连接MQTT服务器2.6.MQTT回调函数3.完整的代码例程4.MQTT连接测试1.安装程序库打开库管理工具工具->管理库.........
  • 使用 flash_download_tool 下载 Vscode PlatformIO 开发 ESP32 的 bin 文件
    一言蔽之:先使用PlatformIO的命令找到PlatformIO是怎么烧录的,然后照葫芦画瓢即可。前提,VScode已经能够烧录固件了,使用PlatformIO打开所需的项目。打开VScode终端执行:piorun-v-tupload执行了之后,PlatformIO就开始编译固件并上传了,找到关键性的东西<lambda>(["up......
  • esp32-C3
    一、esp端        ESP32由EspressifSystems打造,是一款低成本、低功耗的系统具有Wi-Fi和双模蓝牙功能的片上(SoC)系列!ESP32系列包括芯片 ESP32-D0WDQ6(和ESP32-D0WD), ESP32-D2WD 电子版, ESP32-S0WD系列,以及系统级封装(SiP)ESP32-PICO-D4。它的核心是双核或单......
  • 闲来无事-esp32cam实现延时摄影
    扯淡时间在上一篇文章中我提了一嘴,打算使用esp32cam实现一个延迟摄影,奈何存在各种硬件问题,商家发了好几个地板都不好使(就是那个拼多多商家的问题,还说我供电不稳,我特意买了独立供电的hub),后来逛淘宝的时候又给我推送了esp32的板子,我不信邪的买了一个~他妈的上来就好使,所以才有了......
  • 1-WIFI&蓝牙(ESP32)转CAN总线&串口TTL模块-CSDK-VSCode开发环境搭建
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/ESP32_CAN"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 安装串口(CH340)驱动(已经安装的不需......