源码
#define BLINKER_WIFI
#include <Blinker.h>
#include <string.h>
//#include "ESP32_CAM_SERVER.h"
bool setup_camera = false;
char auth[] = "08eec437a3de"; //设备秘钥
char ssid[] = "4G-UFI-7787"; //WIFI名称
char pswd[] = "1234567890"; //WIFI密码
String KeyName;
String KeyValue;
// //初始创建化按钮对象
// BlinkerButton Button_left("btn-left");
// BlinkerButton Button_right("btn-right");
// BlinkerButton Button_front("btn-front");
// BlinkerButton Button_back("btn-back");
// BlinkerButton Button_stop("btn-stop");
// //初始创建化数据对象
BlinkerNumber num_temp("num-temp");
BlinkerNumber num_electric("num-electric");
// 如果未绑定的组件被触发,则会执行其中内容
void dataRead(const String & data)
{
// //获取自启动开发板以来经过的毫秒数
// uint32_t BlinkerTime = millis();
// //将时间发送到手机
// Blinker.print(BlinkerTime);
int startPos = data.indexOf(""") + 1;
int endPos = data.indexOf(""", startPos);
// 提取双引号内的内容
KeyName = data.substring(startPos, endPos);
Serial.println(KeyName);
startPos = data.indexOf(""", endPos+1) + 1;
endPos = data.indexOf(""", startPos);
// 提取双引号内的内容
KeyValue = data.substring(startPos, endPos);
Serial.println(KeyValue);
//板载LED状态翻转
digitalWrite(48, !digitalRead(48));
//上传测试:将温度值上传到数据对象
num_temp.print(12);
}
void motor_init()
{
//设置电机的PWM
ledcSetup(0, 10000, 8); // 设置通道0的频率为10000,分辨率8位
ledcAttachPin(1, 0); // 将通道0与引脚1连接
//设置电机的PWM
ledcSetup(1, 10000, 8); // 设置通道1的频率为10000,分辨率8位
ledcAttachPin(2, 1); // 将通道1与引脚2连接
//设置电机的PWM
ledcSetup(2, 10000, 8); // 设置通道2的频率为10000,分辨率8位
ledcAttachPin(3, 2); // 将通道2与引脚3连接
//设置电机的PWM
ledcSetup(3, 10000, 8); // 设置通道3的频率为10000,分辨率8位
ledcAttachPin(4, 3); // 将通道3与引脚4连接
}
void motor_left(int speed)
{
ledcWrite(0, 0); // 输出PWM
ledcWrite(1, speed); // 输出PWM
ledcWrite(2, speed); // 输出PWM
ledcWrite(3, 0); // 输出PWM
}
void motor_right(int speed)
{
ledcWrite(0, speed); // 输出PWM
ledcWrite(1, 0); // 输出PWM
ledcWrite(2, 0); // 输出PWM
ledcWrite(3, speed); // 输出PWM
}
//前进,速度最大256
void motor_forward(int speed)
{
ledcWrite(0, speed); // 输出PWM
ledcWrite(1, 0); // 输出PWM
ledcWrite(2, speed); // 输出PWM
ledcWrite(3, 0); // 输出PWM
}
void motor_back(int speed)
{
ledcWrite(0, 0); // 输出PWM
ledcWrite(1, speed); // 输出PWM
ledcWrite(2, 0); // 输出PWM
ledcWrite(3, speed); // 输出PWM
}
void motor_stop()
{
ledcWrite(0, 256); // 输出PWM
ledcWrite(1, 256); // 输出PWM
ledcWrite(2, 256); // 输出PWM
ledcWrite(3, 256); // 输出PWM
}
/*
小车控制
轻击 tap
长按 press
松开 pressup
*/
void car_control(void)
{
// 如果按下前进
if(KeyName.equals("btn-front"))
{
// 如果是长按
if(KeyValue.equals("press"))
{
//小车前进
motor_forward(100);
}
// 如果长按松开
if(KeyValue.equals("pressup"))
{
//小车停止
motor_stop();
}
}
// 如果按下左转
if(KeyName.equals("btn-left"))
{
if(KeyValue.equals("press"))
{
motor_left(100);
}
if(KeyValue.equals("pressup"))
{
motor_stop();
}
}
//如果是按下右转
if(KeyName.equals("btn-right"))
{
if(KeyValue.equals("press"))
{
motor_right(100);
}
if(KeyValue.equals("pressup"))
{
motor_stop();
}
}
// 如果是按下后退
if(KeyName.equals("btn-back"))
{
if(KeyValue.equals("press"))
{
motor_back(100);
}
if(KeyValue.equals("pressup"))
{
motor_stop();
}
}
// 如果是按下停止
if(KeyName.equals("btn-stop"))
{
if(KeyValue.equals("tap"))
{
motor_stop();
}
if(KeyValue.equals("press"))
{
motor_stop();
}
if(KeyValue.equals("pressup"))
{
motor_stop();
}
}
//清除字符串缓存
KeyName.remove(0);
KeyValue.remove(0);
}
void setup()
{
// 初始化串口
Serial.begin(115200);
BLINKER_DEBUG.stream(Serial);
// 初始化blinker
Blinker.begin(auth, ssid, pswd);
//注册回调函数,当有设备收到APP发来的数据时会调用对应的回调函数
Blinker.attachData(dataRead);
// 初始化有LED的IO
pinMode(48, OUTPUT);
// 点亮LED
digitalWrite(48, LOW);
//初始化电机
motor_init();
}
void loop()
{
// 运行MQTT
Blinker.run();
// 运行小车控制
car_control();
// 局域网摄像头设置
// if (Blinker.connected() && !setup_camera)
// {
// setupCamera();
// setup_camera = true;
// Blinker.printObject("video", "{"str":"mjpg","url":"http://"+ WiFi.localIP().toString() + ""}");
// }
//设备延时
//Blinker.delay(500);
}
复制代码效果