我如何通过私有Github仓库对ESP8266 HTTPupdate?

问题描述 投票:-1回答:1

我尝试通过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
github esp8266 arduino-esp8266
1个回答
0
投票
[从GitHub进行更新的方法不同,首先GitHub使用HTTPS连接,这意味着您需要在TLS / SSL设置之前进行配置。此外,端口80用于不安全的连接,端口443用于安全的连接。] >

公共存储库(不安全)

这是更简单的方法,只需从.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

您可以按照以下示例进行与httpUpdate的安全连接。另外,您将需要下载证书,这可以通过在项目的同一文件夹中执行下一个脚本来完成:https://github.com/esp8266/Arduino/blob/master/libraries/ESP8266WiFi/examples/BearSSL_CertStore/certs-from-mozilla.py

[如果使用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帐户中配置令牌。

按照GitHub帮助页面上的说明创建令牌:https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line

您只需要选择此选项Git image

复制令牌并保存,您只能看到一次。

您不能使用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>替换为之前创建和保存的那个。

请记住,编辑此库将影响您将来的所有项目,因此,还原或注释添加到库中的两个标头后,即可。

仅此而已,让我成为您在遵循此说明后是否有任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.