赞
踩
发文希望能够帮忙物联网爱好者少走弯路,少被割韭菜。如果觉得此文对您有帮助的话帮忙点个赞,感谢!!!
哔哩哔哩网址:开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制_公羽兴_哔哩哔哩_bilibili
开源免费代码_02_单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制_公羽兴-02_哔哩哔哩_bilibili
博客网址:公羽兴
阿里云盘免费共享文件:Arduino、ESP32、ESP8266、点灯科技安装包/库文件/APP等资源
实物图片:
介绍:单摇杆远程遥控小车,基于Arduino的ESP-NOW,ESP32发送指令、ESP32接收指令,实现小车毫秒级完美控制。
物料清单:
1.ESP32(Arduino开发板:ESP32 Dev Module)两块 15.5元/块
2.摇杆 一个 1.32元
3.双H桥步进电机迷你L298N 一个 0.57元
4.电机 两个 0.5元/个
5.LED灯 一个 0.58元
软件介绍:请看我第一篇文章
连线介绍:看细节图或哔哩哔哩视频
代码:
ESP-NOW单摇杆远程遥控小车的程序代码做到最简化,删除了多余指令,方便大家理解和增加新的功能,期间也填了很多坑,希望可以帮助到大家。
ESP32发送端(发送端中的MAC地址需要填入接收端的MAC地址,获取教程请百度搜索,我会附上MAC地址获取代码)
- #include <esp_now.h>
- #include <WiFi.h>
-
- uint8_t broadcastAddress[] = {0x7C, 0x87, 0xCE, 0x2D, 0x87, 0xC4};
- //ESP32不带天线接口MAC地址:7C:87:CE:2D:87:C4
-
- int k0_x,k0_y;
-
- // 发送结构体类型
- typedef struct struct_message {
- int LX;
- int LY;
- } struct_message;
- struct_message myData;// 创建一个结构体变量
-
- void setup() {
- Serial.begin(9600); // 初始化串口波特率
- WiFi.mode(WIFI_STA); // 设置WIFI模式为STA模式,即无线终端
-
- // 初始化ESP-NOW
- if (esp_now_init() != ESP_OK) {
- Serial.println("Error initializing ESP-NOW");
- return;
- }
-
- // 注册通信频道
- esp_now_peer_info_t peerInfo;
- memcpy(peerInfo.peer_addr, broadcastAddress, 6);
- peerInfo.channel = 0; //通道
- peerInfo.encrypt = false;//是否加密为False
- if (esp_now_add_peer(&peerInfo) != ESP_OK){
- Serial.println("Failed to add peer");
- return;
- }
- }
-
- void loop() { //循环结构体
- k0_x=analogRead(32); //摇杆RX通道对应ESP32_GPIO32,读取摇杆实时数据
- k0_y=analogRead(33); //摇杆RY通道对应ESP32_GPIO33,读取摇杆实时数据
-
- if(k0_x>1024&&k0_x<3072) k0_x=2048; //根据摇杆输入信号,判断k0_x、k0_y的值
- else if(k0_x<1024) k0_x=0;
- else if(k0_x>3072) k0_x=4095;
- if(k0_y>1024&&k0_y<3072) k0_y=2048;
- else if(k0_y<1024) k0_y=0;
- else if(k0_y>3072) k0_y=4095;
-
- myData.LX = k0_x; //将k0_x、k0_y的值写入LX、LY
- myData.LY = k0_y;
-
- Serial.print("myData= "); //打开工具-串口监视器可查看,即将发送的LX、LY值
- Serial.print(myData.LX);Serial.print(" - ");Serial.println(myData.LY);
- Serial.print(" k0= ");
- Serial.print(k0_x);Serial.print(" - ");Serial.println(k0_y);
- //delay(500); //减缓LX、LY信号发送间隔,方便串口查看调整代码
-
- //发送信息到指定ESP32上
- esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
- delay(100);
- }
- //博客网址:公羽兴:https://blog.csdn.net/weixin_52850743?type=blog
- //ESP-NOW单摇杆远程遥控小车的程序代码做到最简化,删除了多余指令
- //方便大家理解和增加新的功能,期间也填了很多坑,希望可以帮助到大家
ESP32接收端
- #include <esp_now.h>
- #include <WiFi.h>
-
- int L_X,L_Y;
-
- typedef struct struct_message {
- int LX;
- int LY;
- } struct_message;
-
- //创建结构体变量
- struct_message myData;
-
- //创建一个回调函数作为接收数据后的串口显示
- void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
- memcpy(&myData, incomingData, sizeof(myData));
- //打开工具-串口监视器可查看,接收的LX、LY值
- Serial.print("myData.LX: "); Serial.print(myData.LX);
- Serial.print("myData.LY: "); Serial.println(myData.LY);
-
- //接收LX、LY数据,将接收数据写入L_X、L_Y
- L_X = myData.LX;
- L_Y = myData.LY;
-
- if(L_X==0&&L_Y==2048) { //判断接收数据值,执行电机前进、后退及转弯操作
- FF(); //前进
- }
- else if(L_X==4095&&L_Y==2048) {
- BB(); //后退
- }
- else if(L_X==2048&&L_Y==0) {
- FL(); //左转
- }
- else if(L_X==2048&&L_Y==4095) {
- FR(); //右转
- }
- else if(L_X==2048&&L_Y==2048) {
- MM(); //停止
- }
- }
-
- void MM()//停止
- {
- digitalWrite(32, 0);
- digitalWrite(33, 0);
- digitalWrite(25, 0);
- digitalWrite(26, 0);
- digitalWrite(5, 0);
- digitalWrite(17, 0);
- digitalWrite(16, 0);
- Serial.println(" MM ");
- }
- void FF()//前进
- {
- digitalWrite(32, 1);
- digitalWrite(33, 0);
- digitalWrite(25, 1);
- digitalWrite(26, 0);
- digitalWrite(5, 1);
- digitalWrite(17, 0);
- digitalWrite(16, 0);
- Serial.println(" FF ");
- }
- void BB()//后退
- {
- digitalWrite(32, 0);
- digitalWrite(33, 1);
- digitalWrite(25, 0);
- digitalWrite(26, 1);
- digitalWrite(5, 0);
- digitalWrite(17, 1);
- digitalWrite(16, 0);
- Serial.println(" BB ");
- }
- void FL()//左转
- {
- digitalWrite(32, 1);
- digitalWrite(33, 0);
- digitalWrite(25, 0);
- digitalWrite(26, 1);
- digitalWrite(5, 0);
- digitalWrite(17, 0);
- digitalWrite(16, 1);
- Serial.println(" FL ");
- }
- void FR()//右转
- {
- digitalWrite(32, 0);
- digitalWrite(33, 1);
- digitalWrite(25, 1);
- digitalWrite(26, 0);
- digitalWrite(5, 1);
- digitalWrite(17, 1);
- digitalWrite(16, 1);
- Serial.println(" FR ");
- }
-
- void setup() {
- //初始化窗口
- Serial.begin(9600); // 初始化串口波特率
- pinMode(32, OUTPUT); //电机GPIO口
- pinMode(33, OUTPUT);
- pinMode(25, OUTPUT);
- pinMode(26, OUTPUT);
- digitalWrite(32,LOW); //电机GPIO口低电平
- digitalWrite(33,LOW);
- digitalWrite(25,LOW);
- digitalWrite(26,LOW);
-
- pinMode(5, OUTPUT); //灯光GPIO口
- pinMode(17, OUTPUT);
- pinMode(16, OUTPUT);
- digitalWrite(5,LOW); //灯光GPIO口低电平
- digitalWrite(17,LOW);
- digitalWrite(16,LOW);
-
- // 初始化 ESP-NOW
- WiFi.mode(WIFI_STA);
- Serial.print("ESP32 RC RX MAC Address: ");
- Serial.println(WiFi.macAddress());
- if (esp_now_init() != 0) {
- Serial.println("Error initializing ESP-NOW");
- return;
- }
-
- // 设置接收数据回调函数
- esp_now_register_recv_cb(OnDataRecv);
- }
-
- void loop() { //循环结构体
-
- }
- //博客网址:公羽兴:https://blog.csdn.net/weixin_52850743?type=blog
- //ESP-NOW单摇杆远程遥控小车的程序代码做到最简化,删除了多余指令
- //方便大家理解和增加新的功能,期间也填了很多坑,希望可以帮助到大家
MAC地址获取代码:(先打开串口调试器,再将代码上传至接收端的ESP32中即可获得MAC地址)
- #include "WiFi.h"
-
- void setup(){
- Serial.begin(115200);
- WiFi.mode(WIFI_MODE_STA);
- Serial.print("MAC地址为:");
- Serial.println(WiFi.macAddress());
- }
-
- void loop(){
- Serial.print("MAC地址为:");
- Serial.println(WiFi.macAddress());
- delay(2000);
- }
单摇杆远程遥控小车,ESP-NOW,ESP32实现小车控制
发文希望能够帮忙物联网爱好者少走弯路,少被割韭菜。如果觉得此文对您有帮助的话帮忙点个赞,感谢!!!如果有什么意见或建议欢迎各位联系我。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。