源码
- #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);
- }
效果