yoyojacky 发表于 2022-6-16 23:06:52

【连载一】如何在树莓派上通过arduino-cli编程ESP32-C3?

本帖最后由 yoyojacky 于 2022-6-16 23:22 编辑

## 前言
前不久疫情期间封印在家,我无意中发现自己因为写了不少帖子攒下来很多积分,然后看到DF商城能够积分兑换模块,又有微信群里小伙伴谈论ESP32-C3 说是RISC-V架构,能跑神经网络,于是激动的就下单了。
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/174134e4aadh185ild4tw1.jpg )

一口气用积分换了3个,钱么纸么花么!积分么随便花!只要我不心疼,没有人会心疼。。。随着每天捅喉咙和牙痛困扰,也就慢慢遗忘了,谁知道突然一天快递小哥送来了惊喜。
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/174058ssqrjgew33agiaqi.jpg)
打开一看,好可爱的小开发板。拇指大小,带wifi和蓝牙,还能做神经网络就很nice。它们是这样的:
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/173645ecinz13ibw82incc.png)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/174018abrjjptj3f5bjd3x.png)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/174031oiq4ag0aewslemaa.png)
于是就想着找个时间搭建一下环境试试看。
## 思路
本来想着在windows下通过vscode安装esp32的idf环境,后来觉得太麻烦,也不喜欢在vscode下开发,手里有树莓派开发板,心想,为何不用树莓派来开发ESP32-C3呢?熟悉的命令行,如果开发成功了,说不定还能写个一键烧录的脚本,批量烧录固件,万一有人想要量产什么的,也可以有个参考,本着我不开源别人也会开源的想法,我还是决定写个开源的开源方案的帖子来帮助喜欢ESP32和树莓派的朋友。虽然你们会觉得听君一席话,如听一席话,但是我不care, 开心就好,只缺烦恼。
## 说干就干?
不可能的,我是懒癌发作,今天要不是因为ESP32群里沸沸扬扬的讨论ESP32环境到底使用MicroPython还是circuitpython还是idf的时候,我插不上嘴,也不知道为啥要这么纠结,喜欢哪个,习惯哪个,或者哪个适合自己就选择哪个呗。
## 关于一灯大师
大家都知道我在蘑菇云的圈子里面,只会点灯, 所以叫一灯大师。于是我还真去商城一口气兑换了一堆灯。
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/173006bbz0k50mk4dbt4q0.jpg)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/173013pyg5pbhn53na5dc5.jpg)
就是为了测试一下然后安装到我新买的莫哈维上。
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/172945uupo5lawnsw7s8js.png)
为啥要装到我的RC车上? 夜跑不带灯,怎么能拉风?
## 焊接引脚
说干就干,找了两根杜邦线, 开启烙铁,30秒完成任务。
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/175018v648n6j8oxjlan7v.jpg)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/175029kmqvmyhdudhuaxdm.jpg)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/175036yvn19k111fz9lf9l.jpg)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/175045xsgizzwqpvszkvpv.jpg)
焊点还挺饱满的吧?360度2秒焊接。杜邦线白色接VIN到LED灯的+极。 负极用引脚0控制。

## 树莓派配置
Arduino-cli树莓派上安装arduino-cli的方法也非常简单。我目前使用的树莓派系统是Raspberry Pi OS, 版本是:
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/175342m1i32ctoznyz2zen.png)

### 安装arduino-cli 方法:
1. 下载:
```bash
wget https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_ARM64.tar.gz
```
2. 解压:
```bash
tar -xf arduino-cli_latest_Linux_ARM64.tar.gz
```
3. 移动二进制文件到/usr/bin目录下,方便操作。
```bash
sudo mv arduino-cli /usr/bin/
```
4. 测试一下命令是否好用:
```bash
arduino-cli help
```
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/175755ljaeje6h0x9a94nh.png)

5. 查看开发板信息
```bash
arduino-cli board list
   或者
arduino-cli board list --format json
```
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180151oi6fz8148zf8vt8b.png)


![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180157kuufqr3121lm1se6.png)

舒服, 序列号都可以看到,后续写shell脚本操作可以根据序列号来烧录不同的固件了,自动化的第一步就实现了不是?
板子内容再详细一些:

```bash
arduino-cli board details -b esp32:esp32:esp32c3
```

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180523geybeks5fzy5weks.png)

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180601fokxqedkqrttadho.png)

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180618i4hxd9t9dili9uo1.png)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180638tk1qd2qk4526kkcx.png)
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/180727qhbptesg8h01uetm.png)

详细信息就是详细,绝对够用了。

### 更新核心core

arduino-cli需要更新core,这样才可以下载对应的资源。

更新核心前,先去添加json链接,不然你的arduino-cli不知道去哪里更新关于ESP32-C3的资源。

### 初始化配置文件

先初始化配置文件,并修改arduino-cli.yaml文件

```bash
arduino-cli config init
```
生成后的文件是在用户属主目录下一个隐藏目录里面的。

## 一定要编辑它!!!

```bash
vim /home/pi/.arduino15/arduino-cli.yaml
```

在board manager的 addtional_urls: [ ] 这里添加: 单引号引起来,然后如果有多个板子,就添加对应板子的package_index.json路径。

这里我添加了ESP32和ESP8266的:

```bash
'https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json'
```

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/224335fuuufz3iusuj1443.png)

文件路径在这:

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/223811di4tsqsbta08jyba.png)

然后在终端中就可以通过下面的命令来安装和更新了。

```bash
arduino-cli help core   # 可以查看帮助
arduino-cli core update-index    # 更新索引文件
arduino-cli core upgrade   # 升级
arduino-cli core list    # 列出核心
arduino-cli core seach esp32# 查询ESP32的核心
```
如果没有,那就执行下面的命令安装:

```bash
arduino-cli core install esp32:esp32
arduino-cli core download esp32:esp32
```

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/223222zylc6nffgf8zl8fp.png)

如果想玩儿别的板子。

* ESP8266

```bash
arduino-cli core install esp8266:esp8266
```

* Arduino Leonardo

```bash
arduino-cli core install arduino:avr
```

### 创建sketch

```bash
arduino-cli sketch newwifiled
```

会在你当前目录下创建一个wifiled目录,然后里面会生成一个wifiled.ino文件,直接编辑就行了。
###代码我这里实在贴不出来。。。。我贴二楼了。
编辑完保存退出。

### 编译并上传

* 编译:

```bash
arduino-cli compile -b esp32:esp32:esp32c3 wifiled.ino
```
![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/225150qapsdexpeolqtqhd.png)


* 上传:

```bash
arduino-cli upload -p /dev/ttyACM0-b esp32:esp32:esp32c3
```

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/225448px7m4kx76xh4wwt6.png)

然后突然我就发现灯支棱起来了!

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/225948bro18weuop18y8qb.jpg)

然后打开手机,设置,打开wifi 连接配置好的连接:

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/230339iv379y79rr9r88y7.jpg)

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/230348euykkskt3kz0bspu.jpg)

打开浏览器输入:http://192.168.4.1
看到如下图提示。

![](https://imagemc.dfrobot.com.cn/data/attachment/album/202206/16/230354i4qcazqcq441cpik.jpg)

点击OFF对应的here关灯。
点击ON对应的here开灯。
其实实际上我的正好相反。。。

## 总结
到此,基本操作过程就这样顺利完成了。
中途遇到一个问题就是如果你在帖子的Makrdown状态下写好了,保存后,千万别再修改并尝试通过markdown打开文本,别问我怎么知道的。
ok, 我是骑驴玩儿漂移,下次再见。


yoyojacky 发表于 2022-6-16 23:22:34


#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>


#define myLED 0
const char *ssid = "ESP32C3-YOYO";
const char *password = "123123123";

WiFiServer server(80);

void setup() {
       pinMode(myLED, OUTPUT);

       Serial.begin(115200);
       Serial.println();
       Serial.println("Configuring accsess point...");
       WiFi.softAP(ssid, password);
       IPAddress myIP = WiFi.softAPIP();
       Serial.println("AP IP Address: ");
       Serial.println(myIP);
       server.begin();
       Serial.println("Server Started...");
}


void loop() {
WiFiClient client = server.available();

if (client){
   Serial.println("New Client.");
   String currentLine = "";
   while (client.connected()) {
   if (client.available()) {
       char c = client.read();
       if (c == '\n') {
         if (currentLine.length() == 0) {
         client.println("HTTP/1.1 200 OK");
         client.println("Content-type:text/html");
         client.println();
         client.println("Click <a href=\"/ON\">here</a> to turn ON the LED.<br>");
         client.println("Click <a href=\"/OFF\">here</a> to turn OFF the LED.<br>");
         client.println();
         break;
       } else {
         currentLine = "";
         }
       } else if (c != '\r') {
         currentLine += c;
       }

       if (currentLine.endsWith("/ON")) {
          digitalWrite(myLED, LOW);
       }

       if (currentLine.endsWith("/OFF")) {
          digitalWrite(myLED, HIGH);
       }
    }
}
client.stop();
Serial.println("Client Disconnected.");
}
}

yoyojacky 发表于 2022-7-4 17:58:43

没人看啊?。。。

驴友花雕 发表于 2022-7-7 05:35:47

C3,树莓派,点灯.......没整明白,一灯大师

yoyojacky 发表于 2022-8-31 16:08:05

驴友花雕 发表于 2022-7-7 05:35
C3,树莓派,点灯.......没整明白,一灯大师

都是先入门再搞事情啊哈哈

驴友花雕 发表于 2022-8-31 17:58:35

yoyojacky 发表于 2022-8-31 16:08
都是先入门再搞事情啊哈哈

高,实在是高......

yoyojacky 发表于 2022-9-1 18:38:08

驴友花雕 发表于 2022-8-31 17:58
高,实在是高......

哈哈, 后续很快就来了。

驴友花雕 发表于 2022-9-1 21:08:33

yoyojacky 发表于 2022-9-1 18:38
哈哈, 后续很快就来了。

厉害,加油哦

yoyojacky 发表于 2023-4-26 18:43:05

我发现自己不长记性啊。有一次被自己的markdown文档给坑了。
页: [1]
查看完整版本: 【连载一】如何在树莓派上通过arduino-cli编程ESP32-C3?