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

2022-06-167271
AI 快速预览详细 收起
本文介绍了如何在树莓派上使用arduino-cli编程ESP32-C3。首先,通过简单的命令安装和配置arduino-cli环境,然后创建一个名为wifiled的sketch,并编写代码实现WiFi控制LED的功能。最后,通过编译和上传代码到ESP32-C3开发板,成功实现了WiFi控制LED的效果。整个过程简单快捷,适合初学者和进阶开发者。

前言

前不久疫情期间封印在家,我无意中发现自己因为写了不少帖子攒下来很多积分,然后看到DF商城能够积分兑换模块,又有微信群里小伙伴谈论ESP32-C3 说是RISC-V架构,能跑神经网络,于是激动的就下单了。

一口气用积分换了3个,钱么纸么花么!积分么随便花!只要我不心疼,没有人会心疼。。。随着每天捅喉咙和牙痛困扰,也就慢慢遗忘了,谁知道突然一天快递小哥送来了惊喜。

打开一看,好可爱的小开发板。拇指大小,带wifi和蓝牙,还能做神经网络就很nice。它们是这样的:



于是就想着找个时间搭建一下环境试试看。

思路

本来想着在windows下通过vscode安装esp32的idf环境,后来觉得太麻烦,也不喜欢在vscode下开发,手里有树莓派开发板,心想,为何不用树莓派来开发ESP32-C3呢?熟悉的命令行,如果开发成功了,说不定还能写个一键烧录的脚本,批量烧录固件,万一有人想要量产什么的,也可以有个参考,本着我不开源别人也会开源的想法,我还是决定写个开源的开源方案的帖子来帮助喜欢ESP32和树莓派的朋友。虽然你们会觉得听君一席话,如听一席话,但是我不care, 开心就好,只缺烦恼。

说干就干?

不可能的,我是懒癌发作,今天要不是因为ESP32群里沸沸扬扬的讨论ESP32环境到底使用MicroPython还是circuitpython还是idf的时候,我插不上嘴,也不知道为啥要这么纠结,喜欢哪个,习惯哪个,或者哪个适合自己就选择哪个呗。

关于一灯大师

大家都知道我在蘑菇云的圈子里面,只会点灯, 所以叫一灯大师。于是我还真去商城一口气兑换了一堆灯。


就是为了测试一下然后安装到我新买的莫哈维上。

为啥要装到我的RC车上? 夜跑不带灯,怎么能拉风?

焊接引脚

说干就干,找了两根杜邦线, 开启烙铁,30秒完成任务。




焊点还挺饱满的吧?360度2秒焊接。杜邦线白色接VIN到LED灯的+极。 负极用引脚0控制。

树莓派配置

Arduino-cli树莓派上安装arduino-cli的方法也非常简单。我目前使用的树莓派系统是Raspberry Pi OS, 版本是:

安装arduino-cli 方法:

  1. 下载:

    wget https://downloads.arduino.cc/arduino-cli/arduino-cli_latest_Linux_ARM64.tar.gz
  2. 解压:

    tar -xf arduino-cli_latest_Linux_ARM64.tar.gz
  3. 移动二进制文件到/usr/bin目录下,方便操作。

    sudo mv arduino-cli /usr/bin/
  4. 测试一下命令是否好用:

    arduino-cli help

  5. 查看开发板信息

    arduino-cli board list
    或者
    arduino-cli board list --format json

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

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



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

更新核心core

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

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

初始化配置文件

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

arduino-cli config init 

生成后的文件是在用户属主目录下一个隐藏目录里面的。

一定要编辑它!!!

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

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

这里我添加了ESP32和ESP8266的:

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

文件路径在这:

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

arduino-cli help core     # 可以查看帮助
arduino-cli core update-index    # 更新索引文件
arduino-cli core upgrade     # 升级
arduino-cli core list    # 列出核心
arduino-cli core seach esp32  # 查询ESP32的核心

如果没有,那就执行下面的命令安装:

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

如果想玩儿别的板子。

  • ESP8266
arduino-cli core install esp8266:esp8266
  • Arduino Leonardo
arduino-cli core install arduino:avr

创建sketch

arduino-cli sketch new  wifiled

会在你当前目录下创建一个wifiled目录,然后里面会生成一个wifiled.ino文件,直接编辑就行了。

代码我这里实在贴不出来。。。。我贴二楼了。

编辑完保存退出。

编译并上传

  • 编译:
arduino-cli compile -b esp32:esp32:esp32c3 wifiled.ino

  • 上传:
arduino-cli upload -p /dev/ttyACM0  -b esp32:esp32:esp32c3

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

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

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

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

总结

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




创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
yoyojacky
yoyojacky
作者
我发现自己不长记性啊。有一次被自己的markdown文档给坑了。
驴友花雕
驴友花雕
C3,树莓派,点灯.......没整明白,一灯大师
驴友花雕
驴友花雕回复yoyojacky
厉害,加油哦
yoyojacky
yoyojacky
作者
回复驴友花雕
哈哈, 后续很快就来了。
共4条回复,已加载2条,点击查看更多共4条回复,已加载全部
yoyojacky
yoyojacky
作者
没人看啊?。。。
yoyojacky
yoyojacky
作者

#include
#include
#include
#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 here to turn ON the LED.
");
client.println("Click here to turn OFF the LED.
");
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.");
}
}
- 没有更多了 -