当前位置:首页 > 技术类 > 普通2.4g遥控车改4g遥控车资料-8266

普通2.4g遥控车改4g遥控车资料-8266

微信用户1年前 (2023-01-09)技术类2100

  背景:传统遥控器都是航模为代表的2.4G遥控器,它们在室外且无障碍物时遥控距离很长,可达几千米,但是有障碍物时,遥控距离可能仅有10多米。市面上也有一些2.4g遥控改装4G的,是读取2.4g遥控信号,并转发至服务器,但是价格昂贵,几百到几千块!而且也没有开源的一体4g遥控器。

      本次设计的这款遥控为4G遥控,只要有4G网络的地方,就能完美控制,延迟100ms左右。拥有它以后,你就能在家开着小车出去探险、出去买菜、取快递……本期从车架到遥控,都能白嫖立创!成本不过百元!

  • 2.4g接收器所连8266

普通2.4g遥控车改4g遥控车资料-8266

#include <ESP8266WiFi.h>
#include <PubSubClient.h>


// 设置wifi接入信息(要连接的wifi)
const char* ssid = "WIFI";
const char* password = "密码";
String topicString = "lmwmm_car";//输入自己的通信暗号,能保证别人不和你重复就行
const char* mqttServer = "43.136.64.172";//test.ranye-iot.net(MQTT服务器域名或地址)
int port=1883;//MQTT服务器端口
int LeTest=0;//改成1则可观察串口数据,方便调试(平时不建议开启,会占用运行性能)



WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

void setup() {
  Serial.begin(115200); 
  Serial.println("初始化成功!");
  pinMode(D1, INPUT);
  pinMode(D2, INPUT);
  pinMode(D3, INPUT);
  pinMode(D4, INPUT);
  pinMode(D5, INPUT);
  pinMode(D6, INPUT);
  pinMode(D7, INPUT);
  pinMode(D8, INPUT);
  WiFi.mode(WIFI_STA);  //设置ESP8266工作模式为无线终端模式
  connectWifi();// 连接WiFi
  mqttClient.setServer(mqttServer, port); // 设置MQTT服务器和端口号
  connectMQTTServer(); // 连接MQTT服务器
}

void loop() { 
  if (mqttClient.connected()) { // 如果开发板成功连接服务器    
      pubMQTTmsg();
    mqttClient.loop();          // 保持客户端心跳
  } else {                  // 如果开发板未能成功连接服务器
    connectMQTTServer();    // 则尝试连接服务器
  }
  delay(10);
}

void connectMQTTServer(){
  // 根据ESP32的MAC地址生成客户端ID(避免与其它ESP32的客户端ID重名)
  String clientId = "esp32-" + WiFi.macAddress();
  // 连接MQTT服务器
  if (mqttClient.connect(clientId.c_str())) { 
    Serial.println("MQTT Server Connected.");
    Serial.println("Server Address: ");
    Serial.println(mqttServer);
    Serial.println("ClientId:");
    Serial.println(clientId);
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(3000);
  }   
}
int CH1,CH2,CH3,CH4,CH5,CH6,CH7,CH8;
 void pubMQTTmsg(){
  static int value; // 客户端发布信息用数字
  char publishTopic[topicString.length() + 1];   // 这么做是为确保不同用户进行MQTT信息发布时,ESP8266客户端名称各不相同,
  strcpy(publishTopic, topicString.c_str());
  CH1 = pulseIn(D1,HIGH);
  CH2 = pulseIn(D2,HIGH);
  CH3 = pulseIn(D3,HIGH);
  CH4 = pulseIn(D4,HIGH);
  CH5 = pulseIn(D5,HIGH);
  CH6 = pulseIn(D6,HIGH);
  CH7 = pulseIn(D7,HIGH);
  CH8 = pulseIn(D8,HIGH);//读取通道信息
  // 建立发布信息。信息内容以Hello World为起始,后面添加发布次数。
  String messageString = "A"+String(CH1)+"B"+String(CH2)+"C"+String(CH3)+"D"+String(CH4)+"E"+String(CH5)+"F"+String(CH6)+"G"+String(CH7)+"H"+String(CH8)+"I";
  char publishMsg[messageString.length() + 1];   
  strcpy(publishMsg, messageString.c_str());
  // 实现ESP32向主题发布信息
  if(mqttClient.publish(publishTopic, publishMsg)){
    if(LeTest==1)
    {Serial.println(publishMsg);}
  } else {
    Serial.println("Message Publish Failed."); 
  }
}
void connectWifi(){
  WiFi.begin(ssid, password);
  //等待WiFi连接,成功连接后输出成功信息
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");  
  Serial.println(""); 
}
  • 电调、舵机所连8266

普通2.4g遥控车改4g遥控车资料-8266

#include <ESP8266WiFi.h>
#include <PubSubClient.h>
#include <Servo.h>
#include <Ticker.h>
Ticker ticker;
Servo CH1,CH2,CH3,CH4,CH5,CH6,CH7,CH8;
//双摇杆舵机+L298N+8266开发板

// 设置wifi接入信息(根据小车要连接的WiFi信息进行修改)
const char* ssid = "WIFI热点";
const char* password = "密码";
String topicString = "lmwmm_car";//与另一份代码中的该部分相同
const char* mqttServer = "43.136.64.172";//test.ranye-iot.net(MQTT服务器域名或地址)
int port=1883;//MQTT服务器端口
int LeTest=0;//改成1则可观察串口数据,方便调试(平时不建议开启,会占用运行性能)


int Ym,Fx,LeCar,Ym1,Fx1;
WiFiClient wifiClient;
PubSubClient mqttClient(wifiClient);

void setup() {
  Serial.begin(115200);  
  pinMode(LED_BUILTIN, OUTPUT); //设置内置LED引脚为输出模式以便控制LED// 启动串口通讯(波特率为9600,波特率可以理解为串口传输数据的速度)
  digitalWrite(LED_BUILTIN,LOW);
  CH1.attach(D1,1000,2000);
  CH2.attach(D2,1000,2000);
  CH3.attach(D3,1000,2000);
  CH4.attach(D4,1000,2000);
  CH5.attach(D5,1000,2000);
  CH6.attach(D6,1000,2000);
  CH7.attach(D7,1000,2000);
  CH8.attach(D8,1000,2000);
  WiFi.mode(WIFI_STA);  //设置ESP8266工作模式为无线终端模式(8266像手机一样连接到wifi的模式)
  connectWifi();  // 连接WiFi
  mqttClient.setServer(mqttServer, port);// 设置MQTT服务器和端口号
  mqttClient.setCallback(receiveCallback);// 设置MQTT订阅回调函数
  connectMQTTserver();// 连接MQTT服务器
 ticker.attach(0.1, touch);//0.1秒数据延迟
}

void connectMQTTserver() {
  String clientId = "esp8266-" + WiFi.macAddress();
  if (mqttClient.connect(clientId.c_str())) {
    Serial.println("MQTT Server Connected.");
    Serial.println("Server Address:");
    Serial.println(mqttServer);
    Serial.println("ClientId: ");
    Serial.println(clientId);
    subscribeTopic(); // 订阅指定主题
  } else {
    Serial.print("MQTT Server Connect Failed. Client State:");
    Serial.println(mqttClient.state());
    delay(3000);
  }
}


// 收到信息后的回调函数
int CH11,CH22,CH33,CH44,CH55,CH66,CH77,CH88;
char CH01[5],CH02[5],CH03[5],CH04[5],CH05[5],CH06[5],CH07[5],CH08[5];//储存接受到的通道数据
int Alocation,Blocation,Clocation,Dlocation,Elocation,Flocation,Glocation,Hlocation,Ilocation;
void receiveCallback(char* topic, byte* payload, unsigned int length) {
 if(LeTest==1) 
 {for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    if(i==length-1)
    {Serial.println("");}
  }
 }
 else
{ if((char)payload[0]=='A')//检测8266②号是否联网
  {
  LeCar=1;
  int j=0;
  for ( int i = 1; i < 6; i++) 
    {if ((char)payload[i]!='B')
      {CH01[j]=(char)payload[i];
        j+=1;}
     else
     {Blocation=i,j=0;
     break;}}//寻找CH1数据
    for (int i = Blocation+1; i < length; i++) 
     {if ((char)payload[i]!='C')
     {CH02[j]=(char)payload[i];
        j+=1;}
     else
      {Clocation=i,j=0;
      break;}}//寻找CH2数据
      for (int i = Clocation+1; i < length; i++) 
     {if ((char)payload[i]!='D')
     {CH03[j]=(char)payload[i];
        j+=1;}
     else
      {Dlocation=i,j=0;
      break;}}//寻找CH3数据
      for (int i = Dlocation+1; i < length; i++) 
     {if ((char)payload[i]!='E')
     {CH04[j]=(char)payload[i];
        j+=1;}
     else
      {Elocation=i,j=0;
      break;}}//寻找CH4数据
      for (int i = Elocation+1; i < length; i++) 
     {if ((char)payload[i]!='F')
     {CH05[j]=(char)payload[i];
        j+=1;}
     else
      {Flocation=i,j=0;
      break;}}//寻找CH5数据
      for (int i = Flocation+1; i < length; i++) 
     {if ((char)payload[i]!='G')
     {CH06[j]=(char)payload[i];
        j+=1;}
     else
      {Glocation=i,j=0;
      break;}}//寻找CH6数据
      for (int i = Glocation+1; i < length; i++) 
     {if ((char)payload[i]!='H')
     {CH07[j]=(char)payload[i];
        j+=1;}
     else
      {Hlocation=i,j=0;
      break;}}//寻找CH7数据
      for (int i = Hlocation+1; i < length; i++) 
     {if ((char)payload[i]!='I')
     {CH08[j]=(char)payload[i];
        j+=1;}
     else
      {Ilocation=i,j=0;
      break;}}//寻找CH8数据
      CH11=String(CH01).toInt();
      CH22=String(CH02).toInt();
      CH33=String(CH03).toInt();
      CH44=String(CH04).toInt();
      CH55=String(CH05).toInt();
      CH66=String(CH06).toInt();
      CH77=String(CH07).toInt();
      CH88=String(CH08).toInt();
  for (int i = 0; i < 5; i++) 
   {CH01[i]='\0';CH02[i]='\0';CH03[i]='\0';CH04[i]='\0';
    CH05[i]='\0';CH06[i]='\0';CH07[i]='\0';CH08[i]='\0';}//重置通道临时数据
}
else LeCar=0;}
}

void touch(){
  if(LeCar==1)
   {
    CH1.write(CH11);CH2.write(CH22);CH3.write(CH33);CH4.write(CH44);
    CH5.write(CH55);CH6.write(CH66);CH7.write(CH77);CH8.write(CH88);
   }
}


void subscribeTopic() {
  char subTopic[topicString.length() + 1];
  strcpy(subTopic, topicString.c_str());
  if (mqttClient.subscribe(subTopic)) {
    Serial.println("Subscrib Topic:");
    Serial.println(subTopic);
  } else {
    Serial.print("Subscribe Fail...");
  }
}

void connectWifi() {
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    digitalWrite(LED_BUILTIN,LOW);
    delay(500);
    digitalWrite(LED_BUILTIN,HIGH);
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi Connected!");
  Serial.println("");
  digitalWrite(LED_BUILTIN,HIGH);
}

void loop() {
  if (mqttClient.connected()) { // 如果开发板成功连接服务器
    mqttClient.loop();          // 处理信息以及心跳
  } else {                      // 如果开发板未能成功连接服务器  
    connectMQTTserver();        // 则尝试连接服务器
  }
}


免责声明
    本网站在国家相关法律法规规定的范围内,只按现有状况提供文章发布第三方网络平台服务,本网站及其所有者非交易一方,也非交易任何一方之代理人或代表;同时,本网站及其所有者也未授权任何人代表或代理本网站及其所有者从事任何网络交易行为或做出任何承诺、保证或其他类似行为,除非有明确的书面授权。
    鉴于互联网的特殊性,本网站无法鉴别和判断相关交易各主体之民事权利和行为能力、资质、信用等状况,也无法鉴别和判断虚拟交易或正在交易或已交易之虚拟物品来源、权属、真伪、性能、规格、质量、数量等权利属性、自然属性及其他各种状况。因此,交易各方在交易前应加以仔细辨明,并慎重考虑和评估交易可能产生的各项风险。

扫描二维码推送至手机访问。

版权声明:本文由点度点度金讯时代-BLOG发布,如需转载请注明出处。

本文链接:https://www.lmwmm.com/post/495.html

分享给朋友:

“普通2.4g遥控车改4g遥控车资料-8266” 的相关文章

重大突破,电脑能用鸿蒙系统了!

重大突破,电脑能用鸿蒙系统了!

近年来,“缺芯少魂”带来的卡脖子危机为众多行业敲响警钟,我们必须加快国产操作系统替代研发进程.可喜的是,随着国内操作系统市场快速增长以及政策投入力度的加大,国产操作系统正逐渐实现从无到有、从“可用”到“好用”的跨越式发展。同时,一批极具竞争...

ChatGPT注册教程攻略:解决手机无法接收验证码问题(亲测有效)

ChatGPT注册教程攻略:解决手机无法接收验证码问题(亲测有效)

今天给大家介绍一款最近非常火爆的AI智能聊天工具:ChatGPT。它的功能:文能写文章,武能改BUG,马斯克对它的评价是“Scary Good!”。不过国内的很多小伙伴在注册这个工具的时候可能会遇到这样或那样的问题导致无法获的ChatGPT...

PC端微信接收的文件变只读?这可能是最好的解决办法

PC端微信接收的文件变只读?这可能是最好的解决办法

近日,不少读者在后台留言称,使用微信 PC 版接收的文档只能以“只读模式”打开,导致用户无法直接编辑保存。据众多网友反馈,这是自更新至 3.9 版本之后就遇到的问题,接受的文档无论是 Word 还是 Excel,以及无论是用 WPS 还是...

最近热度“狂飙”的ChatGPT,到底什么来头?

最近热度“狂飙”的ChatGPT,到底什么来头?

最近的朋友圈和互联网,除了在话题中心“狂飙”的高家三兄妹/全员恋人安欣/迈克杰克驴以外,还有就是出道两个月就火出圈的 ChatGPT 。ChatGPT 是个什么鬼东西?ChatGPT 作为一款人工智能机器人,上知天文,下知地理,能写文章、能...

ChatGPT能上传文件了,文档图片数据集秒理解,代码一键执行

ChatGPT能上传文件了,文档图片数据集秒理解,代码一键执行

梦晨 发自 凹非寺量子位 | 公众号 QbitAIChatGPT又出试验型新模式,不少网友陆续收到代码解释器Alpha测试资格。简单来说,这个模式提供两个功能:执行Python代码,接受文件上传下载。为什么是这两个功能的组合?可以看目前最火...

AI孙燕姿翻唱爆火,多亏这个开源项目!广西老表带头打造,上手指南已出

AI孙燕姿翻唱爆火,多亏这个开源项目!广西老表带头打造,上手指南已出

AI孙燕姿这么快翻唱了这么多首歌,到底是咋实现的?关键在于一个开源项目。最近,这波AI翻唱趋势大火,不仅是AI孙燕姿唱的歌越来越多,AI歌手的范围也在扩大,就连制作教程都层出不穷了。而如果在各大教程中溜达一圈后就会发现,其中的关键秘诀,还是...