4410浏览
查看: 4410|回复: 4

[ESP8266/ESP32] 【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?

[复制链接]
本帖最后由 yoyojacky 于 2023-4-27 10:47 编辑

前言
在之前和各位驴友一起开发漂移驴车(蚊车系列)的时候,每每在进行联合调试的时候,总是遇到需要开启多个Arduino IDE的需求,因为我们是想尝试使用ESP32-C3 来实现一个遥控器+一个接收机的操作。这时候在windows的系统中,设备的名称经常是COMX,例如:COM5, COM4这样,light在直播的时候就常常提到:”我晕了。拔掉一个ESP32我们再看看。。。。“, 编译上传代码的时候有时候要等好久。我说,我建议上树莓派, 用arduino-cli进行编译和上传,非常方便的。特别是当你需要批量烧录的时候..., light总是说: 我就喜欢用arduino IDE, 怼的我无言以对,但是我相信还是有人和我一样喜欢用命令行来解决问题的。哈哈
项目设想
采用任意一个树莓派作为编程主机,然后一根USB数据线(TYPE-C)口, 两个ESP32-C3, 商城有售,也可以积分零元购。
产品链接:https://www.dfrobot.com.cn/goods-3494.html
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图1

这小小的ESP32-C3 可是内有乾坤啊。
Beetle ESP32-C3是一款基于ESP32-C3 RISC-V 32位单核处理器芯片的主控板,专为物联网 (IoT) 设备而设计。

Beetle ESP32-C3在仅硬币大小的体积上引出了多达13个IO口,制作项目时不必再担心IO口不够用的情况,同时主控板还集成锂电池充电管理功能,可以直接连接锂电池,不需要外围模块,同时保证应用体积和安全性。

Beetle ESP32-C3配套的扩展板在未增加太大体积的情况下,引出了更多的电源,在制作项目时焊接更加方便,板载的GDI显示屏接口解决使用屏幕时的接线烦恼。

Beetle ESP32-C3支持Wi-Fi 和 Bluetooth 5 (LE) 双模通讯,降低了设备配网难度,同时还支持蓝牙 Mesh (Bluetooth Mesh) 协议和乐鑫 Wi-Fi Mesh可以实现更高的通讯稳定性和更大的覆盖面积,适用于广泛的物联网应用场景。

Beetle ESP32-C3拥有详细的示例教程,通过教程可以轻松的使用控制器的无线功能,连接阿里云、IFTTT等物联网平台,同时DFRobot商城提供了上千种传感器和执行器,这些传感器和执行器也有详细的教程,因此你可以轻松搭建出自己的物联网系统。

Beetle ESP32-C3可以使用Arduino IDE、ESP-IDF、MicroPython进行编程,C语言、python都可以轻松的操纵硬件。

它有什么特性呢?
  • 超小体积,尺寸仅25*20.5mm
  • 板载锂电池充电管理,充放电更安全
  • 配套底板,制作项目、使用屏幕更加方便
  • RISC-V 32位内核
  • 支持Wi-Fi 和 Bluetooth 5 (LE) 双模通讯
体积小,制作自己的DIY项目太小巧了,感觉和我们蚊车太配了。。


哪些技术参数是我们需要的呢?

基本参数

  • 工作电压: 3.3V
  • Type-C输入电压: 5V DC
  • VIN输入电压:5V DC
  • 工作电流: 25mA
  • 最大充电电流: 400mA
  • 工作温度:-40~105℃
  • 模块尺寸:25x20.5 mm

硬件信息

  • 处理器:32 位 RISC-V 单核处理器
  • 主频:160 MHz
  • SRAM:400KB
  • ROM:384KB
  • Flash:4MB
  • RTC SRAM:8KB
  • 时钟:外置 (32 kHz) 晶振、内置快速 RC 振荡器时钟 17.5 MHz(可调节)、以及PLL时钟
  • USB:USB 2.0 可达 12Mbit/s

WIFI

  • WIFI协议:IEEE 802.11b/g/n
  • WIFI频宽: 2.4 GHz 频带支持 20 MHz 和 40 MHz 频宽
  • WIFI模式:Station 模式、SoftAP 模式、SoftAP+Station 模式和混杂模式
  • WIFI频率:2.4GHz
  • 帧聚合: TX/RX A-MPDU, TX/RX A-MSDU

蓝牙

  • 蓝牙协议:Bluetooth 5、Bluetooth mesh
  • 蓝牙频率:125 Kbps、500 Kbps、1 Mbps、2 Mbps

接口引脚

  • 数字I/O             x13
  • LED PWM 控制器 6个通道                ############ 这个控制舵机和油门。
  • SPI                  x1
  • UART              x2
  • I2C             x1                              ###########  这里接OLED屏幕 可以显示用。
  • I2S            x1
  • 红外收发器:发送通道 x2、接收通道 x2,(任意管脚)
  • 2 × 12 位 SAR 模/数转换器, 6 个通道                      ########### ADC采样可以读取电位计的信息。
  • DMA 控制器,3 个接收通道和 3 个发送通道


项目思路
之前的工作坊也给大家搭建过环境,也在各种开发夜分享过了,但由于网络的原因,经常会出现失败的情况,甚至在我写本篇文档的时候也是各种出BUG。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图2
竟是没有合适的版本,对于我当前的操作系统。。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图3
最近正好有Orange Pi 5在手,测试的间隙正好尝试一下是否OPI5 也能使用arduino-cli来给ESP32-C3 下载程序。
我这次想做的是一个mini的坦克,是Question之前送我的,放置了好久,都咩有尝试改造一下,正好昨晚翻出来了突发奇想,如果用ESP32-C3 来通过DRV8833驱动坦克的两个小电机从而带动履带运动,然后控制可以使用另一片ESP32-C3 结合一个小的mini摇杆读取ADC引脚的值,然后映射到一个固定的范围,然后两片C3 通过ESPNOW协议进行通信,这样自己就制作了一款基于ESPNOW的遥控坦克了? 坦克外观已经有了。剩下的就是搭建环境,编写代码了。
搭建环境
我有个思路就是死磕,手动下载总是失败,我就写个死循环, 成功再退出,否则就一直下,哈哈,有点儿不讲武德了,esp32的工程师不要怪罪我哦,谁让你们的开发环境这么大!

焊接DRV8833
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图16

接线图如下:
DRV8833 和 ESP32-C3 连接

DRV8833 ESP32-C3
IN1
6
IN2 4
VCC VIN
GND GND
IN3 0
IN4 1

* DRV8833 接直流电机,坦克的直流电机很小,用电不大,所以直接驱动了,如果是12v的大功率电机,需要额外供电哦,不然USB口不保。
DRV8833 电机
OUT1    左侧电机正极(实际上无所谓正负极,随便接)
OUT2   左侧电机负极
OUT3 右侧电机正极
OUT4 右侧电机负极

中间J1的焊盘连接起来就是EN, 表示enable,就是相当于有的板子上的STBY, 短接就行了。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图17

硬件就搞定了,下面开始搞软件的环节。
下载arduino-cli
我在OPI5上通过终端执行:
  1. wget https://github.com/arduino/ardui ... _Linux_ARM64.tar.gz
  2. tar -xf  arduino-cli_0.32.2_Linux_ARM64.tar.gz
  3. sudo cp -vf arduino-cli /usr/bin/
  4. bash
复制代码
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图4
下载,解压,拷贝,初始化变量一气呵成,然后就开始初始化:

  1. arduino-cli config init
复制代码


编辑/home/orangepi/.arduino15/arduino-cli.yaml文件,修改这里添加两个URL:
  1. additional_urls: ['https://espressif.github.io/arduino-esp32/package_esp32_index.json',  'http://download.dfrobot.top/FireBeetle/package_DFRobot_index.json' ]
复制代码
改好了如图所示:
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图5
然后保存退出后,执行:
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图6
接着进行安装所需要的编译器:
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图7
耐心等待,这里如果一直下载失败,类似这样:
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图8
就可以尝试我下面的方法, 直接写个死循环,一直进行安装,如果失败了就继续,成功了就退出,死缠烂打思密达:

  1. while true
  2. do
  3.       arduino-cli core install esp32:esp32   &&  break
  4.       sleep 3
  5. done
复制代码

下载过程中还给服务器3秒喘息的机会。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图9
在我不懈的努力下,哦,不是我,是Orange Pi 5的不懈努力下,它怕了,瞬间就让我下载完成了,回想起在工作坊翻车的经历,突然想起来,大家如果都开了ESPNOW,整个网络中都是广播, 会不会是导致5G网络不好用的原因呢?  这个问题有待研究,哈哈,找机会邀请圈圈大佬来做一次无线电分析。
失败了就重头再来,反正是非要安装好不行。。。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图10
总共用时, 3分15秒
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图11
安装好了环境,我们尝试更新一下,顺手搞了个arduino的,以后也能用。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图12
环境到这里就搭建完成了,是不是很简单。
创建sketch
  1. arduino-cli sketch new mytank
复制代码
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图13
然后进入目录就编辑文件即可。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图14
先点个灯测试一下。
  1. int led = 10;
  2. void setup() {
  3. pinMode(led,OUTPUT);
  4. }
  5. void loop()
  6. {
  7. digitalWrite(led,HIGH);  
  8. delay(1000);  
  9. digitalWrite(led,LOW);  
  10. delay(1000);
  11. }
复制代码

编译上传
只要执行一条命令就可以了,但是先要接好ESP32-C3 的模块,通过USB-C接口的线缆接入OPI5, 就会发现识别出来一个ttyACM0的设备,就是你的ESP32-C3。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图15
执行下面的命令时,请确认自己在自己创建的项目目录里面,例如我创建的是mytank 的sketch,我就需要在这个目录中,然后执行下面的命令就可以编译上传刚才写好的代码了。
  1. arduino-cli compile -b esp32:esp32:esp32c3  -p /dev/ttyACM0 --upload
复制代码
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图18
如果出现这个错误,不要着急,安装一个pyserial的库即可, 我顺带着升级了一下pip。
  1. pip install pyserial
复制代码
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图19
然后再次执行编译上传的命令,就会看到:
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图20
这时候就可以看到LED闪烁了,到这里,说明我们基本环境搭建好了,测试也正常了。
我们接下来就是要编写代码能够进行小车的控制。
ESP32-C3, 我贴了E1 作为坦克的主控制器,也是后期接收遥控信号的设备,因此在ESPNOW环境的角色中,它扮演的是client, 就是接收端
而另一片ESP32-C3 就是发射端,我们需要先获取当前这片esp32-c3的MAC地址信息,后期定义peer端时候需要。
我这里用esptool.py 工具直接读取,默认没有安装,直接安装即可,我安装的时候忘记截图了,就调出来看看最后一行。。
  1. sudo apt update && sudo apt -y install esptool
复制代码
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图21
###读取MAC地址
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图22
esptool版本太低导致无法读取, 直接用pip3安装
  1. pip3 install esptool
复制代码

4.5.1 版本的就来了。
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图23
读取mac瞬间丝滑:
  1. esptool.py --chip esp32c3 --port /dev/ttyACM0 read_mac
复制代码

【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图24
编写坦克控制程序
思路:
  • 1. 先分别测试引脚电平高低的组合会导致坦克运动的姿态。
  • 2. 然后编写驱动坦克前进, 后退,左转,右转, 停止的几个函数
  • 3. 调用函数进行坦克测试。
  • 4. 加入ESPNOW部分,进行通信,对端先发送前进后退,左转右转信号, 本地解析并执行函数。
  • 5. 遥控端设置: 添加OLED0.96 屏幕并添加开机启动画面,摇杆读取信息状态等。
  • 6. 设计外壳(呼叫黄开顺:干活啦干活啦!)

今天就先写到这里,下一篇继续,喜欢的就点赞收藏,或者购买了ESP32C3后加入我们的行列哈哈。
未完待续....

WedApril-202304265669..png

yoyojacky  初级技匠
 楼主|

发表于 2023-4-27 10:48:44

中篇预告: 测试坦克前进后退,左转右转及原地掉头,停止等操作,并生成函数代码。
回复

使用道具 举报

囧大大王  见习技师

发表于 2023-6-1 17:37:04

这个外壳怎么搞的?自己做的还是买的呀?
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2023-6-7 21:23:59

囧大大王 发表于 2023-6-1 17:37
这个外壳怎么搞的?自己做的还是买的呀?

坦克是老黄question送的,其他的是自己买的。
ESP32C3 可以在DF商城里面买到。就是可以举一反三。
网上也可以买DRV8833驱动板,N20减速电机。然后组合一下。
再买俩电池。任何车车都可以尝试改造了。
回复

使用道具 举报

yoyojacky  初级技匠
 楼主|

发表于 2023-6-7 21:25:30

嗯,代码已经搞定,后面找时间写一下操作步骤好了,目前先开源了:
https://github.com/yoyojacky/espnowdft
【连载-上篇】如果两片ESP32-C3做个遥控坦克可好?图1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail