ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车

小车源代码

注意修改WIFI 信息

#include <analogWrite.h>
#include <WiFi.h>
#include <PubSubClient.h> #define led_one 18
// L298N Info GPIO
short m1_ena = 32;
short m1_in1 = 33;
short m1_in2 = 25; short m2_enb = 26;
short m2_in3 = 27;
short m2_in4 = 14; short m3_ena = 12;
short m3_in1 = 13;
short m3_in2 = 23; short m4_enb = 22;
short m4_in3 = 21;
short m4_in4 = 19; int car_state = 0; // 小车状态
int car_speed = 150; // 小车电机脉冲,
void car_init(); // 小车初始化
void car_stop(); // 小车停
void car_mqtt_control(); // 小车控制函数
void car_m1_go();
void car_m2_go();
void car_m3_go();
void car_m4_go();
void car_m1_back();
void car_m2_back();
void car_m3_back();
void car_m4_back();
void car_m1_stop();
void car_m2_stop();
void car_m3_stop();
void car_m4_stop(); void car_top_go(); // 全速前进 ↑
void car_back_back(); // 全速后退 ↓
void car_left(); // 左←
void car_right(); // 右→
void car_back_left(); // 左斜下
void car_back_right(); // 右斜下
void car_top_left(); // 左斜上
void car_top_right(); // 右斜上
void car_360(); // WIFI info 这是你家的wifi信息 SSID 网络频带在2.4 GHz 注意!!!
const char *SSID = "4G-UFI-AB87";
const char *PASSWORD = "1234567890"; // MQTT Info
// http://www.taichi-maker.com/public-mqtt-broker/ 免费的MQTT服务器
const char *MQTT_SERVERS = "broker-cn.emqx.io";
int MQTT_PROT = 1883; // MQTT 主题
const char *MQTT_TOPIC_LED = "xapi/car/led";
const char *MQTT_TOPIC_ONLINE = "xapi/car/online";
const char *MQTT_TOPIC_CONTROL = "xapi/car/control";
const char *MQTT_TOPIC_SPEED = "xapi/car/speed";
const char *MQTT_TOPIC_HEART = "xapi/car/heart";
const char *CLIENT_ID = "esp8266-457065e5-f063-474e-2saf-cacf5cb52af5"; WiFiClient espClient;
PubSubClient client(espClient);
void init_wifi(); // 初始化wifi
void mqtt_reconnect(); // 重新连接wifi
void mqtt_msg_callback(char *topic, byte *payload, unsigned int length); // mqtt 消息回调
void mqtt_heart(); // 心跳
void led_topic_fn(String data); // led topic 处理函数
void car_control_fn(String data);// 小车 topic 处理函数
void car_speed_fn(String data); // 速度控制 void setup() {
Serial.begin(115200);
pinMode(led_one, OUTPUT);
car_init(); // 小车初始化
init_wifi(); // wifi 初始化
client.setServer(MQTT_SERVERS, MQTT_PROT); // 设置mqtt 服务和端口
client.setCallback(mqtt_msg_callback); // 设置mqtt 回调函数
} void loop() {
if (!client.connected())
{
mqtt_reconnect();
}
client.loop();
car_mqtt_control();
delay(500);
mqtt_heart();
}
// car -----------------------------------
void car_init(){
pinMode(m1_ena, OUTPUT);
pinMode(m1_in1, OUTPUT);
pinMode(m1_in2, OUTPUT); pinMode(m2_enb, OUTPUT);
pinMode(m2_in3, OUTPUT);
pinMode(m2_in4, OUTPUT); pinMode(m3_ena, OUTPUT);
pinMode(m3_in1, OUTPUT);
pinMode(m3_in2, OUTPUT); pinMode(m4_enb, OUTPUT);
pinMode(m4_in3, OUTPUT);
pinMode(m4_in4, OUTPUT);
} void car_stop(){
digitalWrite(m1_in1, LOW);
digitalWrite(m1_in2, LOW);
digitalWrite(m2_in3, LOW);
digitalWrite(m2_in4, LOW);
digitalWrite(m3_in1, LOW);
digitalWrite(m3_in2, LOW);
digitalWrite(m4_in3, LOW);
digitalWrite(m4_in4, LOW);
} // ------------------------- M1
void car_m1_go(){
analogWrite(m1_ena, car_speed);
digitalWrite(m1_in1, LOW);
digitalWrite(m1_in2, HIGH);
} void car_m1_back(){
analogWrite(m1_ena, car_speed);
digitalWrite(m1_in1, HIGH);
digitalWrite(m1_in2, LOW);
} // ----------------------M2
void car_m2_go(){
analogWrite(m2_enb, car_speed);
digitalWrite(m2_in3, LOW);
digitalWrite(m2_in4, HIGH);
} void car_m2_back(){
analogWrite(m2_enb, car_speed);
digitalWrite(m2_in3, HIGH);
digitalWrite(m2_in4, LOW);
} // ----------------------M3
void car_m3_go(){
analogWrite(m3_ena, car_speed);
digitalWrite(m3_in1, LOW);
digitalWrite(m3_in2, HIGH);
} void car_m3_back(){
analogWrite(m3_ena, car_speed);
digitalWrite(m3_in1, HIGH);
digitalWrite(m3_in2, LOW);
} // -----------------------M4
void car_m4_go(){
analogWrite(m4_enb, car_speed);
digitalWrite(m4_in3, LOW);
digitalWrite(m4_in4, HIGH);
}
void car_m4_back(){
analogWrite(m4_enb, car_speed);
digitalWrite(m4_in3, HIGH);
digitalWrite(m4_in4, LOW);
} void car_m1_stop(){
digitalWrite(m1_in1, LOW);
digitalWrite(m1_in2, LOW);
}
void car_m2_stop(){
digitalWrite(m2_in3, LOW);
digitalWrite(m2_in4, LOW);
};
void car_m3_stop(){
digitalWrite(m3_in1, LOW);
digitalWrite(m3_in2, LOW);
};
void car_m4_stop(){
digitalWrite(m4_in3, LOW);
digitalWrite(m4_in4, LOW);
}; // -----------------------小车组合移动
void car_top_go(){
car_m1_go();
car_m2_go();
car_m3_go();
car_m4_go();
} void car_back_back(){
car_m1_back();
car_m2_back();
car_m3_back();
car_m4_back();
} void car_top_left(){
car_m1_stop();
car_m4_stop(); car_m2_go();
car_m3_go();
} void car_top_right(){
car_m2_stop();
car_m3_stop(); car_m1_go();
car_m4_go();
} void car_back_left(){
car_m1_stop();
car_m4_stop(); car_m2_back();
car_m3_back();
} void car_back_right(){
car_m2_stop();
car_m3_stop(); car_m1_back();
car_m4_back();
} void car_left(){
car_m2_back();
car_m3_back(); car_m1_go();
car_m4_go();
} void car_right(){
car_m2_go();
car_m3_go(); car_m1_back();
car_m4_back();
} void car_360(){
car_m1_go();
car_m3_go(); car_m2_back();
car_m4_back();
} void car_mqtt_control(){
switch (car_state)
{
case 1:
car_top_go();
break;
case 2:
car_back_back();
break;
case 3:
car_left();
break;
case 4:
car_right();
break;
case 5:
car_top_left();
break;
case 6:
car_top_right();
break;
case 7:
car_back_left();
break;
case 8:
car_back_right();
break;
case 9:
car_360();
break;
case 0:
car_stop();
break;
default:
car_stop();
break;
}
} // MQTT --------------------------------------
void led_topic_fn(String data){
Serial.println("led-s");
if (data == "1")
{
Serial.println("open_led");
digitalWrite(led_one, HIGH);
}
else
{
Serial.println("close_led");
digitalWrite(led_one, LOW);
}
} void car_control_fn(String data){
Serial.println("方向-控制");
car_speed = 150;
car_state = data.toInt();
} void car_speed_fn(String data){
Serial.println("方向-速度");
int msgData = data.toInt();
if(msgData >= 255){
car_speed = 255;
return;
}
if(msgData <= 0){
car_speed = 0;
return;
}
car_speed = msgData;
} void init_wifi(){
Serial.println("Connecting to");
Serial.println(SSID); WiFi.begin(SSID, PASSWORD);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
} void mqtt_reconnect()
{
while (!client.connected())
{
Serial.print("Attempting MQTT connection..."); // 第一步: 创建连接
if (client.connect(CLIENT_ID))
{
Serial.println("connected");
client.publish(MQTT_TOPIC_ONLINE, "cat_online"); // 发布
client.subscribe(MQTT_TOPIC_LED); // 监听 led 主题
client.subscribe(MQTT_TOPIC_CONTROL); // 监听 小车控制
client.subscribe(MQTT_TOPIC_SPEED); // 小车 速度
}
else
{
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
} void mqtt_msg_callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic); // 打印主题信息
Serial.print("] ");
String data = "";
for (unsigned int i = 0; i < length; i++)
{
Serial.print((char)payload[i]); // 打印主题内容
data += String((char)payload[i]);
} String topic_data = String(topic); // String() 异步
// led topic
if (topic_data == MQTT_TOPIC_LED)
{
led_topic_fn(data);
} // car topic
if (topic_data == MQTT_TOPIC_CONTROL)
{
car_control_fn(data);
} // car speed
if(topic_data == MQTT_TOPIC_SPEED ){
car_speed_fn(data);
} Serial.println();
} void mqtt_heart(){
if (client.connected())
{
client.publish(MQTT_TOPIC_HEART, "1");
}
}

ESP32+L298N+MQTT+4G无线远程监控+四驱动小破车的更多相关文章

  1. Java虚拟机二:使用jvisualvm工具远程监控tomcat内存

    jdk中自带了很多工具可以用于性能分析,位于jdk的bin目录下,jvisualvm工具可以以图形化的方式更加直观的监控本地以及远程的java进程的内存占用,线程状态等信息. 一.配置tomcat 在 ...

  2. [原创]Java应用性能远程监控系统(C/S架构)

    Java应用性能远程监控系统(使用C/S架构) 适用于监控所有Java应用,具有堆内存监控.方法区监控.GC监控.类加载监控.类编译监控与线程监控,提供堆快照下载,线程快照下载.体验网址:http:/ ...

  3. 【安富莱专题教程第3期】开发板搭建Web服务器,利用花生壳让电脑和手机可以外网远程监控

    说明:1.  开发板Web服务器的设计可以看我们之前发布的史诗级网络教程:链接.2.  需要复杂些的Web设计模板,可以使用我们V6开发板发布的综合Demo:链接.3.  教程中使用的是花生壳免费版, ...

  4. jvisualvm 连接 jstatd 远程监控 jvm 或 Visual GC提示"不受此JVM支持“

    Visual GC提示"不受此JVM支持",可以使用此方法解决. 一.添加配置文件 jstatd.all.policy [root@localhost /]# cd /usr/lo ...

  5. DIY远程监控室内温度设备(tiny6410+ds18b20+yeelink+curl)

    春节了,趁着假期的空闲时间,抽空捣鼓了下tiny6410开发板,发现这个东东尘封许久,很长时间没用过了.貌似最近物联网大热,谷歌收购Nest,其设计的恒温器能够智能调节和远程控制房间的温度,UI和设计 ...

  6. 转载:JProfiler远程监控LINUX上的Tomcat过程细讲

    来源于xuwanbest的博客   所谓"工欲善其事,必先利其器",好的工具确能起到事半工倍的作用.我用到的最多的就两个JConsole 和JProfiler .JConsole监 ...

  7. SNMP远程监控进程信息的OID

    最近有个项目需要用snmp远程监控进程信息.于是我查了一下资料. 一.资料 .1.3.6.1.2.1.25.4.2.1.1.iso.org.dod.internet.mgmt.mib-2.host.h ...

  8. c# 远程监控(4) 接收端 RTP包重组 分屏显示

    我们在上一期使用RTP协议,并进行了配置,打包了视频数据,这一期我们就对发送的数据进行重组,并显示在接受端上.最后对其进行扩展,支持多客户端视频发送,并在接收端分屏显示.完成远程监控的模拟. 先来个效 ...

  9. c# 远程监控(1) 大纲

    此篇文章主要讲了如何使用C# Winform程序模拟一个远程监控系统,并使用RTP实时传输协议传输数据. 应用场景:远程监控.局域网视频会议.客户端流式缓冲播放 这方面的资料还是有一些,但是都需要整合 ...

  10. 远程监控 – 应用程序运行状况测量 CSF 博客

    在远程监控基础知识和故障排除中,我们探讨了 Windows Azure 平台提供的基础指标.信息源.工具和脚本,介绍了有关监控和应用程序运行状况的基本原则.我们演示了如何利用这些基本原则对在 Wind ...

随机推荐

  1. Infinity颜值与实用兼备的新标签页,高效书签管理必选的浏览器扩展

    浏览器是我们互联网冲浪的必备平台,但是在使用浏览器的过程中,我们经常会遇到标签页和书签管理的问题.过多的标签页和书签会导致浏览器变得杂乱无章,不利于我们快速查找需要的内容.为了提高我们的工作和学习效率 ...

  2. 一种很变态但有效的DDD建模沟通方式

    本文书接上回<这就是为什么你学不会DDD>,关注公众号(老肖想当外语大佬)获取信息: 最新文章更新: DDD框架源码(.NET.Java双平台): 加群畅聊,建模分析.技术实现交流: 视频 ...

  3. java本地增量打包工具

    在打增量包每次都需要将class文件.jsp文件等拷贝到增量包中比较麻烦.所以就写了一个增量打包工具. 工作原理:根据文件的最后修改时间来打增量. 1.查找Java类增量:根据eclipse工程下的. ...

  4. Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手

    前言 在Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样.区别就是我们之前用的watch API是和Vue组件以及生命周期是 ...

  5. .NET 开源实时监控系统 - WatchDog

    前言 在平时的开发中随着我们系统应用不断地迭代变的复杂,对应用的实时监控变得越来越重要.实时监控不仅可以帮助我们快速定位问题,还能在出现问题时及时采取措施,减少业务中断的时间. 本文将介绍一个名为Wa ...

  6. Adobe Photoshop cc2022 Mac中文破解版下载 支持intel/M1/M2/M3

    Adobe Photoshop cc2022 Mac版,支持intel.M1.M2.M3芯片,全系都能使用,最低系统需求:11.0以上.建议安装此版本或者ps2024版本. 下载地址放到最后,先来看安 ...

  7. Ubuntu 设置 SMB 服务

    安装 Samba 包 sudo apt install samba samba-common 创建用于 SMB 共享的文件夹 sudo mkdir /usr/local/volumes # 新建用于共 ...

  8. NET Core 多身份校验与策略模式

    背景需求:   系统需要对接到XXX官方的API,但因此官方对接以及管理都十分严格.而本人部门的系统中包含诸多子系统,系统间为了稳定,程序间多数固定Token+特殊验证进行调用,且后期还要提供给其他兄 ...

  9. .NET 网络唤醒

    本文介绍下电脑设备关机的情况下如何通过网络唤醒设备,之前电源S状态 计算机Power电源状态- 唐宋元明清2188 - 博客园 (cnblogs.com) 有介绍过远程唤醒设备,后面这俩天了解多了点所 ...

  10. 专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重排

    专业级语义搜索优化:利用 Cohere AI.BGE Re-Ranker 及 Jina Reranker 实现精准结果重排 1. 简介 1.1 RAG 在说重排工具之前,我们要先了解一下 RAG. 检 ...