请选择 进入手机版 | 继续访问电脑版

『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 13511|回复: 21

[经验分享] github被墙,烧写失败?ESP32模块ESPHome首次烧写终极大法

[复制链接]

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11427
金钱
8496
HASS币
460

教程狂人突出贡献

发表于 2021-5-2 15:36:26 | 显示全部楼层 |阅读模式
本帖最后由 XCray 于 2022-6-20 15:51 编辑

这两天想折腾一下ble,拿出一个esp32模块,按照以往的经验编译好固件后使用esphome-flasher工具烧写,不料失败了!

失败的原因挺恶心的,是因为github被墙,而烧写过程中需要从github下载几个很小的文件。

虽然我对gc党很尊敬,但这种连github都要墙的做法实在让人恼火!

为了这点事搬梯子有点不值当的,只好翻了一下ESPHome-Flasher的源码,终于找到了解决方案。

很显然,我们可以利用ESPressif官方的烧写工具完成烧写,只需要知道ESPHome-Flasher从github上下载了哪几个文件、各自对应的烧写地址就可以了。

答案:
1、在文件esphomeflasher/common.py里:
        addr_filename.append((0x1000, bootloader))
        addr_filename.append((0x8000, partitions))
        addr_filename.append((0xE000, otadata))
        addr_filename.append((0x10000, firmware))
2、在文件esphomeflasher/const.py里:
ESP32_DEFAULT_OTA_DATA = 'https://raw.githubusercontent.com/espressif/arduino-esp32/1.0.0/tools/partitions/boot_app0.bin'
ESP32_DEFAULT_BOOTLOADER_FORMAT = 'https://raw.githubusercontent.com/espressif/arduino-esp32/' \
                                  '1.0.4/tools/sdk/bin/bootloader_$FLASH_MODE$_$FLASH_FREQ$.bin'
ESP32_DEFAULT_PARTITIONS = 'https://raw.githubusercontent.com/esphome/esphomeflasher/master/partitions.bin'
3、好了,固件是自己编译的,其他三个文件的链接和烧写地址都有了,借助github下载加速器就可以下载,然后用espressif官方的烧写工具烧写即可,以后就可以ota了
esp.png

4、三个bin文件附在这儿,需要的自取
bins.rar (10.28 KB, 下载次数: 335)

~~~~~~~~~~~~~~~~~~~~~
原理或原因解释:
esp32的整个flash被分为4个分区,esphome编译生成的固件只是其中之一。
所以第一次烧写必须把4个分区(分别对应一个bin文件)都写进去才行,以后OTA升级就不涉及这个问题了。

8266不一样,那个更简单,只有1个bin文件(可以理解成2个分区是地位相同的,每次OTA都使用其中之一,每次OTA来回倒着用)。

~~~~~~~~~~220401~~~~~~~~~和愚人节无关~~~
注:新版ESPHome已经提供了非常好用的webflash,直接在浏览器里操作就可以了,本贴所述方法也就没必要了



~~~~~~~~~~220612再补充~~~~~~~~~
esp32有多个变种,本贴提到的bin文件只适用于标准的esp32,对于s2、s3、c3等变种,需要其对应的bin文件!!!!

处理器架构都变了,bootloader肯定得变!直接无脑乱用bin文件肯定是不行的呀!
参考:GitHub - esphome/esp-web-tools: Open source tools to allow working with ESP devices in the browser

另外,每种板子上的flash参数(SPI Mode)、晶振的频率(SPI Speed)可能不一样,必须正确选择对应的bootloader.bin文件!

评分

参与人数 1金钱 +5 收起 理由
ekingfan + 5 论坛有你更精彩!

查看全部评分

回复

使用道具 举报

15

主题

636

帖子

2179

积分

金牌会员

Rank: 6Rank: 6

积分
2179
金钱
1543
HASS币
0
发表于 2021-5-2 22:43:52 | 显示全部楼层
编译esphome固件,也得扶梯子啊,怎么都跑不了的。
我要么就是直接esphome dashboard,编译完固件接着就连线刷了。
要么直接用esphomeflasher,就刷一个固件文件就好了(这个好像刷的过程不需要下载文件)。
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11427
金钱
8496
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-3 06:37:06 | 显示全部楼层
telanx 发表于 2021-5-2 22:43
编译esphome固件,也得扶梯子啊,怎么都跑不了的。
我要么就是直接esphome dashboard,编译完固件接着就连 ...

奇怪!

我从来没碰到过编译时需要梯子的情况。

恰恰是用esphome flasher刷写的时候,需要下载3个bin文件。

正好和你说的相反。
回复

使用道具 举报

5

主题

322

帖子

1345

积分

金牌会员

Rank: 6Rank: 6

积分
1345
金钱
1023
HASS币
0
发表于 2021-5-3 07:11:58 | 显示全部楼层
XCray 发表于 2021-5-3 06:37
奇怪!

我从来没碰到过编译时需要梯子的情况。

用的docker版esphome,新编或升级重编才需要,刷机时不需要吧!
回复

使用道具 举报

4

主题

255

帖子

2129

积分

金牌会员

Rank: 6Rank: 6

积分
2129
金钱
1874
HASS币
0
发表于 2021-5-3 09:47:08 | 显示全部楼层
谢谢楼主分享
回复

使用道具 举报

11

主题

217

帖子

3208

积分

元老级技术达人

积分
3208
金钱
2956
HASS币
170

活跃会员教程狂人卓越贡献

发表于 2021-5-6 21:38:11 | 显示全部楼层
XCray 发表于 2021-5-3 06:37
奇怪!

我从来没碰到过编译时需要梯子的情况。

在配置了一些新的功能之后,esphome编译器确实需要拉取一些库文件。可能根据地区的不同,CDN节点随缘可连接,就可以无墙访问成功,可以clean一下编译试试,可能就失败报错了
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11427
金钱
8496
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-7 06:28:01 | 显示全部楼层
本帖最后由 XCray 于 2021-5-26 11:27 编辑
TwoOne 发表于 2021-5-6 21:38
在配置了一些新的功能之后,esphome编译器确实需要拉取一些库文件。可能根据地区的不同,CDN节点随缘可连 ...

我知道你们几位说的esphome编译时也会失败的原因了。

先说一下我的环境和状态:群晖docker,esphome编译时从来没碰到过因为github访问受阻造成的失败,从来没有,包括前段时间把esphome从hassio迁移到单独的容器后从0开始配置esp32模块(之前只用8266)。

编译时确实会需要临时拉取一些库文件,使用esphome flasher工具烧写时需要拉取3个bin文件。库文件vs编译好的bin文件,这是最大的区别!
前者都是从github.com的域名下拉取,而后者是raw.githubusercontent.com。

现在大国域网内访问github相关资源受阻的问题也不是单纯的一个。
github.com域名主要是dns污染,解决这个问题的一个行之有效而又不需要梯子的简单方案就是修改hosts文件。我自从发现访问github.com不爽之后就在路由器上修改了hosts文件,每次发现又不爽了就更新一下,迄今为止都很好用,感谢这篇文章:
2021年 github被墙最新hosts-每日更新
而raw.githubusercontent.com就不同了,这个域名基本上就是真的被墙了,hosts解决不了,如果直接访问这个域名只能搬梯子。虽然借助下载加速器可以解决手动下载的问题,但esphome flasher工具做不到这一点(除非修改它的源码自己编译)。
另外,烧写8266不存在这个问题,因为不需要临时从raw.githubusercontent.com下载啥东西。
回复

使用道具 举报

11

主题

217

帖子

3208

积分

元老级技术达人

积分
3208
金钱
2956
HASS币
170

活跃会员教程狂人卓越贡献

发表于 2021-5-11 11:46:33 | 显示全部楼层
XCray 发表于 2021-5-7 06:28
我知道你们几位说的esphome编译时也会失败的原因了。

先说一下我的环境和状态:群晖docker,esphome编译 ...

确实可以通过修改host搞定。或者再路由器配置全局,一劳永逸~
回复

使用道具 举报

98

主题

2866

帖子

1万

积分

超级版主

智能家居&单板滑雪痴迷爱好者

Rank: 8Rank: 8

积分
11427
金钱
8496
HASS币
460

教程狂人突出贡献

 楼主| 发表于 2021-5-26 11:29:04 | 显示全部楼层
TwoOne 发表于 2021-5-11 11:46
确实可以通过修改host搞定。或者再路由器配置全局,一劳永逸~

修改hosts解决不了raw.githubusercontent.com这个主机访问的问题,至少我这儿的网络不行。其他几个主机修改hosts效果比较明显。
回复

使用道具 举报

0

主题

14

帖子

70

积分

注册会员

Rank: 2

积分
70
金钱
56
HASS币
0
发表于 2021-8-7 16:17:20 | 显示全部楼层
楼主英明!乐鑫esp32遇到同样的问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-3-28 20:33 , Processed in 1.027839 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表