因为玩FPV的缘故手里有一个jumperT20遥控,总是想着怎么利用起来,前两天突发奇想买了个接收机,打算做遥控车。
前期准备:ESP-Wroom-32(其他esp一样的,包含arduino的开发板也是一样的用法)、带有VScode或者Ardunio的电脑、Elrs接收机(我这里用的是915MHz的)、Elrs协议(包含接收机协议与频段的)的遥控器、杜邦线若干、数据线。
第一步:接线,将Elrs接收机接到Esp32上,(Rx,Tx反接都懂,我这里使用软件串口,接到两个支持软件串口的引脚上,例如GPIO19,GPIO21)
第二步:通电,检查Elrs版本,确保接收机和遥控器处于同一个版本中。如果同协议,同频率无法连接大概率是版本问题,小破站搜搜如何升级遥控器固件,这里有TOP大佬的T20的ELRS升级教程:BV1cm4y1Y71z
接收机常亮一般是连接成功。
第三步:写代码
代码如下,用了AlfredoCRSF库来解析CRSF信息,输出出来的数据还可以进行一定的处理,我懒得搞了,后面用区间匹配即可:
#include <AlfredoCRSF.h>
#include <HardwareSerial.h>
#define PIN_RX 19
#define PIN_TX 21
// Set up a new Serial object
HardwareSerial crsfSerial(1);
AlfredoCRSF crsf;
//Use crsf.getChannel(x) to get us channel values (1-16).
void printChannels()
{
//---------------------------全部输出--------------------------------//
for (int ChannelNum = 1; ChannelNum <= 8; ChannelNum++)
{
Serial.print(crsf.getChannel(ChannelNum));
Serial.print(", ");
}
Serial.println(" ");
//--------------------------单独一个频道输出-------------------------//
/* Serial.print(crsf.getChannel(1)); //单独一个频道1
Serial.println(" ");
*/
}
void setup()
{
Serial.begin(115200);
Serial.println("COM Serial initialized");
crsfSerial.begin(CRSF_BAUDRATE, SERIAL_8N1, PIN_RX, PIN_TX);
if (!crsfSerial) while (1) Serial.println("Invalid crsfSerial configuration");
crsf.begin(crsfSerial);
}
void loop()
{
// Must call crsf.update() in loop() to process data
crsf.update();
printChannels();
}
根据个人使用适当修改后烧录到开发板,打开串口可以看到如下
移动右摇杆向左(CH1),观察变化:
可以看到减小了500,总行程是1000,得到数据后进一步处理,转换成PWM或者驱动指令即可实现对电机的控制。