ESP小车控制 --物联网
-
系统需求分析
目前很多信息技术业界大佬都把物联网视作继个人计算机、互联网之后,当今世界最具发展潜力的产业之一。物联网作为继互联网之后新一代的连接方式,正在有力带动传统产业转型升级,引领战略性新兴产业发展,推动社会生产和经济发展方式的深度变革。MQTT是教学中常见的物联网协议之一,MQTT协议是近几年才出现的吗?其实不然,MQTT诞生于1999年互联网初期。Ashton提出IoT概念也是在1999年,MQTT协议生逢其时。当时MIT Auto-ID Labs的Kevin Ashton为了把宝洁的供应链上的RFID标签和互联网连接起来,在1999年第一个提出了IoT这个概念。 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一个基于客户端-服务器的消息发布/订阅传输协议。
-
系统初步设计,包括框架设计,功能设计
手机app 和 esp32 连接到同一个 物联网服务器平台 ,相互订阅和发布话题达到数据互传,来控制esp32 对小车进行驱动。来达到控制小车前进的目地。
客户端监控数据用的是开源的第三方物联网服务器平台 无法进入后台只能接入后订阅话题
- 系统详细设计:
(1)感知层:传感器,组网
(2)网络层:传输网的选择、说明
(3)应用层:数据处理,结果呈现
代码构架
// 电位器连接到GPIO 34(模拟ADC1_CH6) const int potPin = 34; // 用于存储电位器值的变量 int potValue = 0; void setup() { Serial.begin(115200); delay(1000); } void loop() { // 读取电位计值 potValue = analogRead(potPin); Serial.println(potValue); delay(500); }
#include <AsyncTimer.h> int pmPin = 34; int ledPin = 2; int ch0 = 0; AsyncTimer timer; int taskId = 0; void ChangeLedLightness() { int val = analogRead(pmPin); //Serial.println(val); auto vol = analogReadMilliVolts(pmPin); //Serial.println(vol-142); //读取换算毫伏 int duty = val/4095.0*1024; ledcWrite(ch0,duty); } void setup() { Serial.begin(115200) ; analogReadResolution(12); analogSetAttenuation(ADC_11db); ledcSetup(ch0,1000,10); ledcAttachPin(ledPin,ch0); taskId = timer.setInterval(ChangeLedLightness,20);//20 ms 一次 } void loop() { timer.handle(); }
wifi 接入物联网控制系统
//WIFI 连接库和MQTT客户端 #include <WiFi.h> #include <PubSubClient.h> //***************** WiFi 账号密码************************ const char *ssid = "2580"; // Wifi 账号 const char *password = "1234567890"; // wifi 密码 // const char *ssid = "HUAWEI-5VBLX2"; // Wifi 账号 // const char *password = "d13545386916"; // wifi 密码 //**************** MQTT Broker 服务端连接**************** const char *mqtt_broker = "broker-cn.emqx.io"; const char *OutTopic = "ESP_Car/SELF"; const char *InTopic = "ESP_Car/control"; const char *mqtt_username = "ESP32_car"; const char *mqtt_password = "14789632"; const int mqtt_port = 1883; //车灯 const int LED = 2;//到时候改到别的引脚 long lastReconnectAttempt = 0; // ***********************车驱动************************* const int pin26=26; //设置驱动脚 const int pin25=25; const int pin33=33; const int pin32=32; int speed=255;//车速度 String state="s";//车的状态 //控制单元 void Go(){ state="t"; ledcWrite(1,0); ledcWrite(2,speed); ledcWrite(3,0); ledcWrite(4,speed); }//前进 void back(){ state="b"; ledcWrite(1,speed); ledcWrite(2,0); ledcWrite(3,speed); ledcWrite(4,0); }//后退 void left(){ state="l"; ledcWrite(1,0); ledcWrite(2,speed); ledcWrite(3,0); ledcWrite(4,0); }//左 void right(){ state="r"; //发布一个向右 ledcWrite(1,0); ledcWrite(2,0); ledcWrite(3,0); ledcWrite(4,speed); }//右 void stop(){ state="s"; ledcWrite(1,0); ledcWrite(2,0); ledcWrite(3,0); ledcWrite(4,0); }//停 //客户端变量 WiFiClient espClient; PubSubClient client(espClient); //闪灯次数 void re_signal(int fq){ int i = 0; for(i;i<fq;i++){ digitalWrite(LED, HIGH); delay(20); digitalWrite(LED, LOW); delay(20); digitalWrite(LED, HIGH); delay(20); digitalWrite(LED, LOW); delay(20); } } void setup() { //车驱动 ledcSetup(1,50,8); ledcAttachPin(pin25,1); ledcSetup(2,50,8); ledcAttachPin(pin26,2); ledcSetup(3,50,8); ledcAttachPin(pin32,3); ledcSetup(4,50,8); ledcAttachPin(pin33,4); //车灯 pinMode(LED, OUTPUT); //软串口波特率 Serial.begin(115200); lastReconnectAttempt = 0; // connecting to a WiFi network WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("Connecting to WiFi.."); } re_signal(1); Serial.println("Connected to the WiFi network"); //connecting to a mqtt broker 连接服务端 client.setServer(mqtt_broker, mqtt_port); client.setCallback(callback);//回调 while (!client.connected()) { String client_id = "esp32-client-"; client_id += String(WiFi.macAddress()); Serial.printf("The client %s connects to the public mqtt broker\n", client_id.c_str()); if (client.connect(client_id.c_str(), mqtt_username, mqtt_password)) { Serial.println("Public emqx mqtt broker connected"); } else { Serial.println("failed with state "); Serial.println(client.state());//返回连接状态 delay(2000); } } re_signal(3); // publish and subscribe client.publish(OutTopic, "小车车来喽!"); re_signal(3); client.subscribe(InTopic); } boolean reconnect() { if (client.connect("YSL", mqtt_username, mqtt_password)) { // Once connected, publish an announcement... client.publish("outTopic","小车车来喽!"); // ... and resubscribe client.subscribe("inTopic"); } return client.connected(); } //回调函数(主题,内容,长度) void callback(char *InTopic, byte *payload, unsigned int length) { Serial.print("Message arrived in topic: "); Serial.println(InTopic); Serial.print("Message:"); for (int i = 0; i < length; i++) { Serial.print((char) payload[i]); } if (payload[0] == 'C'&payload[1]=='#') { //Serial.print(payload[2]-48);出来的都是字符流 switch (payload[2]) { case '1': digitalWrite(LED,1); // 则点亮LED。 client.publish(OutTopic, "亮"); break; case '0': digitalWrite(LED,0); // 则点亮LED。 client.publish(OutTopic, "咩"); break; case 'L': left(); re_signal(1); client.publish(OutTopic, "左转"); break; case 'R': right(); re_signal(1); client.publish(OutTopic, "右转"); break; case 'S': stop(); re_signal(1); client.publish(OutTopic, "停车"); break; case 'B': back(); re_signal(1); client.publish(OutTopic, "倒车"); break; case 'G': Go(); re_signal(1); client.publish(OutTopic, "前进"); break; case 'V': client.publish(OutTopic, "速度这块容我开发!!!!"); break; default: client.publish(OutTopic, "好家伙,新东西?"); break; } } Serial.println(); Serial.println("-----------------------"); } void loop() { if (!client.connected()) { long now = millis(); if (now - lastReconnectAttempt > 5000) { lastReconnectAttempt = now; // Attempt to reconnect if (reconnect()) { lastReconnectAttempt = 0; } } } else { // Client connected client.loop(); } }
esp32 wifi 只是 其中一个部分
air780e 插入手机卡 做第二阶段控制
本文作者:ClingYang
本文链接:https://www.cnblogs.com/Yang-blackSun/p/18025355
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
本文作者:Yang-blackSun
本文链接:https://www.cnblogs.com/Yang-blackSun/p/18025355
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步