发布于 

ESP32入门到入土 1

开一个坑来记录一下我玩esp32的路。

我电脑的环境如下

系统:Manjrao19

Python版本:3.8.1

Shell:fish

这一篇来说一下刷固件什么的以及我踩的坑。

我基于MicroPython开发的,ArdoinoC要去学C短期玩玩开发板去重新学一门语言好累,加上C那玩意搞得我头皮发麻就没这个想法了,后来发现Python也可以写,那不何乐而不为?

烧录工具(esptool)安装

我们刷MicoPython的工具叫esptool。为了方便管理吧,我就为esp32单独开了一个venv。其实是esptool和我的一个包冲突。话不多说我么先来配置一下virtualenv的环境。

1
2
3
4
$ virtualenv esp32
$ chmod 755 esp32/bin/activate
$ ./acrivate
(esp32)$ pip install esptool

我来稍微解释一下以上命令的意思

  • 第一行是说在当前目录下建立一个esp32的虚拟环境。

  • 第二行是把启动虚拟环境的文件给予可执行权限。

  • 第三行是启动虚拟环境,若启动成功了终端会加一个(环境名)的前缀,就像第四行前一样。

  • 第四行是在虚拟环境中安装esptool。

擦除Flash

如果你的ESP32刚到手上应该先去吧他的Flash擦除一下,这样才能刷如MicroPython。擦除过程非常简单,但是我搞了半天踩了坑,淦。

首先我们先去看看我们esp32用了那个串口

1
2
$ ls /dev/ttyUSB*
crw-rw---- 1 root uucp 188, 0 3月 5 10:07 /dev/ttyUSB0

输出就只有一个所以很明显我的板子用的是ttyUSB0这个串口。

有了串口我们就可以真正的去擦Flash了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
(esp32)$ sudo esptool.py --port /dev/ttyUSB0 erase_flash
esptool.py v2.8
Serial port /dev/ttyUSB0
Connecting.....
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
WARNING: Detected crystal freq 41.01MHz is quite different to normalized freq 40MHz. Unsupported crystal in use?
Crystal is 40MHz
MAC: 24:6f:28:b6:14:04
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 9.2s
Hard resetting via RTS pin...

记得命令跑起来的时候按一下板子上的boot键,我当时就没按导致一直报错。如果你的输出和我差不多那估计就擦好了。

固件刷入

固件我们首先去MicroPyhton官网去下,我不记得在那看到有个大佬说固件貌似v1.10及以上的版本刷不进去。不知道是不是真的,我为了尽量不浪费时间就下了v1.9.4。要是各位愿意可以去试试,要是可以记得评论和我说一下,谢谢了。

下载好我们去看看固件的存放路径,我的是~/Download/esp32-idf3-20180511-v1.9.4.bin

记住以后就可以开始刷了,记住把我的串口号和固件路径换成你的,烧录的时候也要按一下boot键。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(esp32)$ esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 ~/Download/esp32-idf3-20180511-v1.9.4.bin
esptool.py v2.8
Serial port /dev/ttyUSB0
Connecting........_____...
Detecting chip type... ESP32
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 24:6f:28:b6:14:04
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 982832 bytes to 609724...
Wrote 982832 bytes (609724 compressed) at 0x00000000 in 13.9 seconds (effective 565.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

要是输出和我一样证明你固件就刷进去了。

串口交互

我使用的是picocom,这玩意是真的小小到吓到我了,就0.05MiB。我当时看到都懵逼了。

废话不多说我们先开始下载,manjaro的话pacman一下就能下,其他平台我没搞所以动动小手去百度一下就行。安装完成的话我们就可以开始与板子连接交互了!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$ picocom /dev/ttyUSB0 -b 115200
picocom v3.1

port is : /dev/ttyUSB0
flowcontrol : none
baudrate is : 115200
parity is : none
databits are : 8
stopbits are : 1
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
hangup is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv -E
imap is :
omap is :
emap is : crcrlf,delbs,
logfile is : none
initstring : none
exit_after is : not set
exit is : no

Type [C-a] [C-h] to see available commands
Terminal ready

这样输出说明恭喜你按一下Enter你就可以开始交互了!

你可以输入print(‘hello world’)来实验一下。

要是想退出的话你去按Ctrl +C的话木大木大木大,picocom退出要按Ctrl+A然后再按Ctrl+Q

问题记录

  1. 在刷入和清楚的时候记得在命令执行后按boot键(boot键是esp32的下载键)
  2. 按boot键的时机。经过我踩坑时的那么多次尝试,如果你执行命令之后不去按boot键会跑进度条,在进度条时按也是没事的,要是进度条跑慢就会报这样的错。(进度条就是Connecting那行)
1
2
3
4
5
esptool.py v2.8
Serial port /dev/ttyUSB0
Connecting........_____....._____....._____....._____....._____....._____....._____

A fatal error occurred: Failed to connect to Espressif device: Invalid head of packet (0x55)

我感觉第二条是屁话hhh。