我尝试通过ESP8266的Git存储库执行更新固件。但是我不知道如何。该仓库是私有的,这意味着我需要密码,我读到可以使用HTTPclient库进行身份验证。 Github的身份验证如何工作?
而且,我是否需要一些其他代码来更新库? HTTPclient支持HTTPS吗?
编辑:这是我的代码的一些示例,但用于公共仓库:
update.cpp(我在一个单独的头文件中)
//#define repo "https://github.com/username/reponame/branch/path/to/file?raw=true"
#define repo "https://raw.githubusercontent.com/username/reponame/branch/path/to/file"
t_httpUpdate_return ret = ESPhttpUpdate.update(client, repo);
// Or:
//t_httpUpdate_return ret = ESPhttpUpdate.update(client, "server", 80, "file.bin");
我已经配置了httpUpdate错误消息,它显示了下一个错误:
CALLBACK: HTTP update fatal error code -5
HTTP_UPDATE_FAILD Error (-5): HTTP error: connection lost
公共存储库(不安全)
这是更简单的方法,只需从.setInsecure()
库中将WiFiClientSecure.h
添加到wifi客户端,这就可以建立连接,而忽略来自http连接的所有警报。
WiFiClientSecure client;
client.setInsecure();
是不安全的,仅用于测试,而不用于生产。
您必须使用https://raw.githubusercontent.com
,这是从GitHub的公共存储库下载原始数据,仅是文件。您对该文件的完整链接必须为:#define repo "https://raw.githubusercontent.com/<user>/<repo>/master/<path to the .bin>"
t_httpUpdate_return ret = ESPhttpUpdate.update(client, repo);
用您的用户名替换<user>
,用您的存储库名替换<repo>
。 <path to the .bin>
类似于“ folder / folder / firmware.bin”]
公共存储库(安全):
[ESP8266 / Arduino的官方GitHub存储库中有一个示例。https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266httpUpdate/examples/httpUpdateSecure/httpUpdateSecure.ino
[如果使用Windows,则要运行此脚本,您需要在路径中添加“ OpenSSL.exe”,Git随附,您需要在路径中添加Git的bin文件夹。此外,您还需要一个ESP8266 core附带的文件“ ar.exe”。您也可以将这两个.exe文件放在脚本的同一文件夹中。
对于Arduino来说是这样的:
%userprofile%\AppData\Local\Arduino15\packages\esp8266\tools\xtensa-lx106-elf-gcc\2.5.0-4-b40a506\xtensa-lx106-elf\bin
对于PlaformIO是:
%userprofile%\.platformio\packages\toolchain-xtensa\xtensa-lx106-elf\bin
脚本完成后,将创建一个名为data的文件夹,其中包含certs.ar。使用LittleFS将此文件系统镜像上传到ESP8266。
专用存储库:
与上一个相同,只是几处更改,我们将对ESP8266httpUpdate
库进行更改。我们对httpupdatesecure使用相同的示例,您将需要在GitHub帐户中配置令牌。
复制令牌并保存,您只能看到一次。
您不能使用raw.githubusercontent.com
,会给您error 404
,这仅适用于公共仓库。您需要:api.github.com
。您的完整链接看起来像:
https://api.github.com/repos/<user>/<repo>/contents/<path to the .bin>
并且您需要将标头添加到http请求,在ESP8266httpUpdate.cpp
中,必须将其放在开始添加标头的部分的函数HTTPUpdateResult ESP8266HTTPUpdate::handleUpdate
中:
http.addHeader(F("Accept"), "application/vnd.github.v3.raw");
http.addHeader(F("authorization"), "Bearer <your token>");
将<your token>
替换为之前创建和保存的那个。
请记住,编辑此库将影响您将来的所有项目,因此,还原或注释添加到库中的两个标头后,即可。
仅此而已,让我成为您在遵循此说明后是否有任何问题。