ESP32/ESP8266 OTA服务器搭建


ESP32和ESP8266的OTA升级有两种方式
这里介绍的是ESP32的OTA升级方式,ESP8266同理。

.

一、局域网下游览器更新

这个方法在WebServer示例的WebUpdata.ino例程中可查看详细方法。
大概过程是将示例代码中的第12~13行改为电脑连接的WiFi名称和密码。

const char* ssid = "WiFi名称";
const char* password = "WiFi密码";

烧录代码后在打开串口,如果ESP32成功连接上WiFi,将会打印如下内容
在这里插入图片描述
电脑打开游览器网文此地址。
在这里插入图片描述
如果成功串口将会打印如下信息
在这里插入图片描述

网页内容也会变为
在这里插入图片描述
更新成功后ESP32将会复位运行新的固件。
到此,更新结束。

二、网络服务器获取固件

这里提供了三种固件获取方式
第一种是将固件保存在第三方云平台,然后ESP32进行访问下载。
第二种和第三种则是保存在自己的服务器(腾讯云),为ESP32提供下载固件。
第二种和第三种方式相同,只是云服务器上的HTTP文件服务器实现方式不同。可自行选择。

1、第三方云平台

这里介绍的第三方平台是阿里云(https://www.aliyun.com/)
用到阿里云的对象存储服务
如果使用要求不高的话可以免费使用。

(1)固件保存及固件地址链接获取

需要注册一个阿里云账号。
在这里插入图片描述
注册后点击立即开通,开通对象存储服务
然后创建一个Bucket
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
.

上传固件
在这里插入图片描述

.
关闭HTTPS功能
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

将复制的链接保存,需要填入ESP32的代码中。

.

(2)ESP32代码设置

在 Arduino IDE 中打开ESP32的 HTTPUpdate
选择第一个名为 httpUpdate.ino 的例程
在第34行更改要接入的WiFi名称和密码
在这里插入图片描述

然后在第53行更改服务器地址和固件名称
在这里插入图片描述
在这里插入图片描述
然后烧录代码,打开串口,波特率设置为115200。
在这里插入图片描述
如果WiFi连接成功并且更新成功,将会出现上图显示的内容。
如果更新失败将会打印失败原因。
仔细检查以上步骤是否有遗漏的地方。

以上为通过第三方平台来保存固件,并获取固件的方式。

.

2、python下的SimpleHTTPServer方法

说明:此方式仅在腾讯云服务器上经过验证

(1)云服务器设置

在开启http服务器之前需要将编译好的固件提交保存在云服务器。
需要有python环境,系统应该已经自带了,提示没有的话自行安装。

终端用cd命令进入在固件所在目录
然后在此目录下输入如下命令

python -m SimpleHTTPServer 8266

在这里插入图片描述

其中8266为访问当前目录的端口,IP地址为服务器的ip地址
注意,需要在安全组里面将TCP的8266端口设置为允许访问。
在这里插入图片描述

(2)ESP32代码设置

在 Arduino IDE 中打开ESP32的 HTTPUpdate
选择第一个名为 httpUpdate.ino 的例程
在第34行更改要接入的WiFi名称和密码
然后在第53行更改服务器地址和固件名称
具体设置方式是
http://服务器的ip地址:端口/固件名称
如果此目录下有多个固件,设置为需要下载的固件即可。
如下图
在这里插入图片描述
然后烧录代码,打开串口,波特率设置为115200。
如果WiFi连接成功并且更新成功,串口将会打印下图显示的内容。
在这里插入图片描述
并且服务器终端上会打印如下内容
在这里插入图片描述
如果更新失败将会打印失败原因。
仔细检查以上步骤是否有遗漏的地方。

以上方法适合试验用,当退出终端时,SimpleHTTPServer也会被关闭,
如果需要将其放到后台运行,则更改命令即可
nohup python -m SimpleHTTPServer 8266 > /dev/null 2>&1 &

nohup python -m SimpleHTTPServer 8266 > /dev/null 2>&1 &

命令解释如下:
nohup
任务不挂起( no hang up)

python -m SimpleHTTPServer 8266
在当前文件目录下开启 python下的 SimpleHTTPServer,
IP地址为云服务器的IP,端口为8266。
如果不指定端口则默认为8000
开启端口前需要在服务器的安全组内将此端口打开,否则ESP32将无法访问。

/dev/null 2>&1
将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃

&
用于后台执行程序,但是关闭当前终端也会结束,所以需要结合nohup命令才能放入后台运行。

执行此命令后,将会打印任务的PID
在这里插入图片描述

(3)关闭SimpleHTTPServer

如果想关闭 SimpleHTTPServer 的话可直接用kill命令杀死对应PID的进程。
上图中打印的PID是 710,那么可直接用命令杀掉此进程

sudo kill 710

如果不记得打印的PID的话,使用 ps 命令查看当前运行的所有进程。
如下:
输入ps -e 命令查看所有进程
在这里插入图片描述在这里插入图片描述
找到之后使用sudo kill 710命令将进程杀死。
在这里插入图片描述
不放心的话可以再用ps -e 命令查看所有进程。

以上为python下的SimpleHTTPServer方法下载固件。

.

3、Apache2搭建HTTP服务器

第二种方法比较简单,不需要下载或者配置环境。
这里再介绍第三种方式(相比第二种略微繁琐),提供选择余地。

(1)云服务器设置

需要安装 Apache2,安装方式很简单

第一步、 输入三个命令
sudo apt-get update (更新软件列表)
sudo apt-get install apache2 (安装 Apache2)
sudo /etc/init.d/apache2 start (启动 Apache2)

中途会提示是否继续Y/n ,这里输入Y然后回车就行。

安装完成后
游览器访问:http://服务器ip
可以看到如下内容:
(如果没有,查看后面的方法二解决)
在这里插入图片描述

第二步、 输入三个指令

cd /var/www/html (进入/var/www/html目录)
sudo ln -s ~/espserver/download download (创建软连接)
sudo /etc/init.d/apache2 restart (重启 Apache2)

命令意思如下:
cd /var/www/html 进入到/var/www/html目录。

sudo ln -s ~/espserver/download download 在当前目录下在创建一个名为download的软链接,
且软链接指向 /home/ubuntu/espserver/download/目录。
(以后编译的固件直接放入/home/ubuntu/espserver/download/目录即可)

sudo /etc/init.d/apache2 restart 重新启动 Apache2
.

然后游览器访问:http://服务器ip/download/
如果显示如下内容:
在这里插入图片描述
证明设置成功,有小部分人可能无法访问。
可能会有无权限访问的问题。
打开的网页显示如下内容,通过下面的方法一解决。
在这里插入图片描述
.

解决方法一、

如果是权限问题,那就更改一下权限。
/home/ubuntu/espserver/download/这条路径的目录权限都改为755。
更改权限的命令是 chmod

例如,将espserver目录的权限更改为755,则是在ubuntu目录下
输入命令: chmod 755 espserver/
.

所有的目录权限更改之后就可以在游览器正常访问文件了,
如果还是无法显示如下画面,查看方法三
在这里插入图片描述

解决方法二、

使用 vim 更改 Apache2 的配置文件 “apache2.conf

输入命令:vim /etc/apache2/apache2.conf
更改第162行在这里插入图片描述
更改之后还是无法在游览器访问固件所在目录那只能用方法三方法了。

.

解决方法三、

百度(http://www.baidu.com)
CSDN(https://www.csdn.net)
简书(https://www.jianshu.com)
知乎(https://www.zhihu.com)

.

.

如果经过以上两个步骤(六条命令)后,
游览器访问 http://服务器ip/download/
出现下面画面表示服务器设置成功,可进入下个步骤。
在这里插入图片描述
.

(2)ESP32代码设置

在 Arduino IDE 中打开ESP32的 HTTPUpdate
选择第一个名为 httpUpdate.ino 的例程
在第34行更改要接入的WiFi名称和密码
然后在第53行更改服务器地址和固件名称
具体设置方式是
http://服务器的ip地址/download/固件名称
如下图
在这里插入图片描述

然后烧录代码,打开串口,波特率设置为115200。
如果WiFi连接成功并且更新成功,串口将会打印下图显示的内容。
在这里插入图片描述

(3)关闭Apache2

在终端输入命令
sudo /etc/init.d/apache2 stop
注意:关闭Apache2后将无法提供固件下载服务。

.

(4)卸载Apache2

参考文章:
Ubuntu 完全卸载Apache2(https://www.linuxidc.com/Linux/2013-06/85825.htm)

.

三、建议

本文章主要介绍了三种服务器提供固件下载服务的方式。

第一种方式
使用第三方云平台服务,使用方便且文件便于管理。
可能要收费,不过收费很便宜。
适合给没有服务器的小伙伴使用。

第二种方式
使用python环境下的SimpleHTTPServer服务。
搭建迅速,端口设置灵活,将固件放在同目录下便于管理,只需要安全组开放对应端口即可。
适合给有服务器但是图省事的小伙伴。

第三种方式
使用Apache2的HTTP服务。
相对于第二种搭建方法略微麻烦。将固件放在同目录下便于管理,使用80端口(可以更改为其他端口,具体方法自行查找)。

本人更建议使用方法三,除了管理固件外还可以将 /var/www/html/ 目录下的 index.html替换为自己的网页文件,制作自己的网站,适合会HTML或者PHP语言的小伙伴。

.

ESP32如果需要开机检测更新或者自动更新,可直接运行此示例,获取下一版本的固件,如果ESP32获取不到下一版本的固件将执行其他操作。

WiFiClient client;
t_httpUpdate_return ret = httpUpdate.update(client, "http://server/file.bin");

如果ESP32获取不到指定的固件 则 ret = HTTP_UPDATE_FAILED
报错内容是找不到此文件。
.

.

.

.

四、参考资料

1、esp32 http空中升级

昨天剩下的一杯冷茶 的文章
esp32 http空中升级
https://www.jianshu.com/p/ec8d6e983abc

.

2、Ubuntu用Apache2快速搭建一个HTTP文件服务器

柳鲲鹏 的博客
Ubuntu用Apache2快速搭建一个HTTP文件服务器
https://quantum6.blog.csdn.net/article/details/84789552

.

3、Ubuntu 完全卸载Apache2

Linux公社 Linux 的文章
Ubuntu 完全卸载Apache2
https://www.linuxidc.com/Linux/2013-06/85825.htm

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值