当前位置:   article > 正文

ESP32-CAM ——Blinker平台_esp32cam

esp32cam

ESP32-CAM,点灯云平台Blinker,MQTT协议,APP控制,Wifi视频监控,点灯,控制舵机。

一 环境搭建

两个宝藏网站

 点灯科技 (diandeng.tech)

软件下载 - Arduino中文社区

第一次体验Arduino

按照上面教程安装ESP32固件包

语言改为中文

二 常用基本语法 

学过stm32再看Arduino代码,有种看少儿编程的感觉哈哈哈 

串口println

用串口连接电脑,5V

RX-UoT

TX-UnR

IO0 需要连接 GND

工具=》选择开发板=》esp32=》AIThinker ESP32-CAM

下面代码为设置波特率

setup 可以理解为 main 函数 while(1) 之前

loop 理解为 while(1) 里

loop内循环打印字符串, 

  1. void setup() {
  2. // put your setup code here, to run once:
  3. Serial.begin(115200);
  4. }
  5. void loop() {
  6. // put your main code here, to run repeatedly:
  7. Serial.println("hello world");
  8. }

选择端口,点击上传即可

一直显示Connecting就按一下reset 

上传完毕,IO0 断开 GND,按下RESET,打开串口监视器,可看见循环打印字符串

点个灯

由图可知GPIO4对应LED 

文件=》例程

提供了很多模板,一看就懂

  1. int led = 4;
  2. // the setup function runs once when you press reset or power the board
  3. void setup() {
  4. // initialize digital pin LED_BUILTIN as an output.
  5. pinMode(led, OUTPUT);
  6. }
  7. // the loop function runs over and over again forever
  8. void loop() {
  9. digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
  10. delay(1000); // wait for a second
  11. digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
  12. delay(1000); // wait for a second
  13. }

舵机控制

GPIO12输出PWM

  1. #define ServoPin 12
  2. void Myservo(int angle)
  3. {
  4. for (int i = 0; i < 5; i++) {
  5. int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
  6. digitalWrite(ServoPin, HIGH); //将舵机接口电平至高
  7. delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
  8. digitalWrite(ServoPin, LOW); //将舵机接口电平至低
  9. delayMicroseconds(20000 - pulsewidth); //延时脉宽值的微秒数
  10. }
  11. delay(10);
  12. }
  13. // the setup function runs once when you press reset or power the board
  14. void setup() {
  15. // initialize digital pin LED_BUILTIN as an output.
  16. pinMode(ServoPin, OUTPUT);
  17. }
  18. // the loop function runs over and over again forever
  19. void loop() {
  20. Myservo(0);
  21. delay(1000); // wait for a second
  22. Myservo(45);
  23. delay(1000); // wait for a second
  24. Myservo(90);
  25. delay(1000); // wait for a second
  26. Myservo(135);
  27. delay(1000); // wait for a second
  28. Myservo(180);
  29. delay(1000); // wait for a second
  30. }

超声波测距

最后加了个if,软件过滤掉误差

  1. #define Echo 13
  2. #define Trag 15
  3. long gettime()
  4. {
  5. digitalWrite(Trag,HIGH);
  6. delayMicroseconds(10);
  7. digitalWrite(Trag,LOW);
  8. return pulseIn(Echo,HIGH);
  9. }
  10. // the setup function runs once when you press reset or power the board
  11. void setup() {
  12. // initialize digital pin LED_BUILTIN as an output.
  13. pinMode(Echo, INPUT);
  14. pinMode(Trag, OUTPUT);
  15. Serial.begin(115200);
  16. }
  17. // the loop function runs over and over again forever
  18. void loop() {
  19. long dis = gettime()/58;
  20. if(dis > 2) Serial.println(dis);
  21. }

三 摄像头使用

前面都是小卡拉米,正戏这里开始。

先嫖个示例 

改为使用 AI_THINKER ,Wifi名密码改成自己的手机热点

  1. // ===================
  2. // Select camera model
  3. // ===================
  4. //#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
  5. //#define CAMERA_MODEL_ESP_EYE // Has PSRAM
  6. //#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
  7. //#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
  8. //#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
  9. //#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
  10. //#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
  11. //#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
  12. #define CAMERA_MODEL_AI_THINKER // Has PSRAM
  13. //#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
  14. //#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
  15. // ** Espressif Internal Boards **
  16. //#define CAMERA_MODEL_ESP32_CAM_BOARD
  17. //#define CAMERA_MODEL_ESP32S2_CAM_BOARD
  18. //#define CAMERA_MODEL_ESP32S3_CAM_LCD
  19. #include "camera_pins.h"
  20. // ===========================
  21. // Enter your WiFi credentials
  22. // ===========================
  23. const char* ssid = "IQOO 5";
  24. const char* password = "88888888";
  1. clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
  2. mode:DIO, clock div:1
  3. load:0x3fff0018,len:4
  4. load:0x3fff001c,len:1216
  5. ho 0 tail 12 room 4
  6. load:0x40078000,len:10944
  7. load:0x40080400,len:6388
  8. entry 0x400806b4
  9. E (79) psram: PSRAM ID read error: 0xffffffff
  10. .......
  11. WiFi connected
  12. Starting web server on port: '80'
  13. Starting stream server on port: '81'
  14. Camera Ready! Use 'http://192.168.100.9' to connect

电脑和cam都连接上手机热点,烧录完成后,访问串口提供的网址 

四 使用Blinker云平台

监控视频传输

下载点灯科技云平台APP,注册,添加设备,选择网络设备,可以得到一个“密钥”

例程选择最下面的 Blinker 里的 Blinker_ESP32_CAM。

“密钥”、Wifi和密码,填入程序, Blinker.begin()入参“密钥”、Wifi和密码

  1. #define BLINKER_WIFI
  2. //#define BLINKER_ESP_SMARTCONFIG
  3. #include <Blinker.h>
  4. #include "ESP32_CAM_SERVER.h"
  5. //blinker提供的密钥,WiFi名密码
  6. char auth[] = "8578f8f1626f";
  7. char ssid[] = "iQOO 5";
  8. char pswd[] = "88888888";
  9. //默认摄像头不开启
  10. bool setup_camera = false;
  11. //反馈设备状态
  12. void dataRead(const String & data)
  13. {
  14. BLINKER_LOG("Blinker readString: ", data);
  15. Blinker.vibrate();//按下APP按键产生震动
  16. uint32_t BlinkerTime = millis();
  17. Blinker.print("millis", BlinkerTime);
  18. }
  19. void setup()
  20. {
  21. Serial.begin(115200);//串口使得能
  22. BLINKER_DEBUG.stream(Serial);//blinker串口debug
  23. pinMode(LED_BUILTIN, OUTPUT);
  24. digitalWrite(LED_BUILTIN, LOW);
  25. Blinker.begin(auth,ssid,pswd);//通过WiFi账号密码连接平台
  26. Blinker.attachData(dataRead);//反馈设备状态
  27. }
  28. void loop()
  29. {
  30. Blinker.run();//blinker运行 包括连接blinker云 MQTT协议
  31. //判断设备是否正常执行 正常就输入ip地址
  32. if (Blinker.connected() && !setup_camera)
  33. {
  34. setupCamera();
  35. setup_camera = true;
  36. Blinker.printObject("video", "{\"str\":\"mjpg\",\"url\":\"http://"+ WiFi.localIP().toString() + "\"}");
  37. }
  38. }

编译出错         exit status 1        就把Blinker库卸载重新导入,去除原zip名里的防重“(1)”这种

APP添加一个“视频”,mjpg,输入获得的网址

  1. [2786] WiFi Connected.
  2. [2786] IP Address:
  3. [2786] 192.168.100.9
  4. [4410] Freeheap: 177596
  5. [4414] mDNS responder started
  6. [4417] webSocket_MQTT server started
  7. [4417] ws://DAFE7962GYXI01DUHFFY724S.local:81

MQTT控灯

官网找到按钮示例 

 点灯科技 (diandeng.tech)

 添加一个按钮控制GPIO输出,实现开灯关灯

  1. #define BLINKER_WIFI
  2. //#define BLINKER_ESP_SMARTCONFIG
  3. #define led 4
  4. #include <Blinker.h>
  5. #include "ESP32_CAM_SERVER.h"
  6. // 新建组件对象
  7. BlinkerButton Button1("led");
  8. // 按下按键即会执行该函数
  9. void button1_callback(const String & state) {
  10. BLINKER_LOG("get button state: ", state);
  11. digitalWrite(led, !digitalRead(led));
  12. }
  13. //blinker提供的密钥,WiFi名密码
  14. char auth[] = "8578f8f1626f";
  15. char ssid[] = "iQOO 5";
  16. char pswd[] = "88888888";
  17. //默认摄像头不开启
  18. bool setup_camera = false;
  19. //反馈设备状态
  20. void dataRead(const String & data)
  21. {
  22. BLINKER_LOG("Blinker readString: ", data);
  23. Blinker.vibrate();//按下APP按键产生震动
  24. uint32_t BlinkerTime = millis();
  25. Blinker.print("millis", BlinkerTime);
  26. }
  27. void setup()
  28. {
  29. Serial.begin(115200);//串口使得能
  30. BLINKER_DEBUG.stream(Serial);//blinker串口debug
  31. pinMode(led, OUTPUT);
  32. digitalWrite(led, LOW);
  33. Blinker.begin(auth,ssid,pswd);//通过WiFi账号密码连接平台
  34. Blinker.attachData(dataRead);//反馈设备状态
  35. Button1.attach(button1_callback);//关联处理按钮函数
  36. }

添加按钮和监视器,按钮内容改为led与代码一致 

 

MQTT控制舵机

一个最大值为180的滑块。 

 

 完整代码

  1. #define BLINKER_WIFI
  2. //#define BLINKER_ESP_SMARTCONFIG
  3. #define led 4
  4. #define ServoPin 12 //控制舵机
  5. #include <Blinker.h>
  6. #include "ESP32_CAM_SERVER.h"
  7. // 新建组件对象
  8. BlinkerButton Button1("led");
  9. // 新建组件对象
  10. BlinkerSlider Slider0("duoji"); //位置0-3 滑块 数据键名 舵机范围0-180
  11. //舵机控制代码
  12. void Myservo(int angle)
  13. {
  14. for (int i = 0; i < 5; i++) {
  15. int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
  16. digitalWrite(ServoPin, HIGH); //将舵机接口电平至高
  17. delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
  18. digitalWrite(ServoPin, LOW); //将舵机接口电平至低
  19. delayMicroseconds(20000 - pulsewidth); //延时脉宽值的微秒数
  20. }
  21. delay(10);
  22. }
  23. //滑块任务函数
  24. void slider0_callback(int32_t value) //滑块0
  25. {
  26. int servo=value;
  27. Myservo(servo);//转动角度}
  28. }
  29. // 按下按键即会执行该函数
  30. void button1_callback(const String & state) {
  31. BLINKER_LOG("get button state: ", state);
  32. digitalWrite(led, !digitalRead(led));
  33. }
  34. //blinker提供的密钥,WiFi名密码
  35. char auth[] = "8578f8f1626f";
  36. char ssid[] = "iQOO 5";
  37. char pswd[] = "88888888";
  38. //默认摄像头不开启
  39. bool setup_camera = false;
  40. //反馈设备状态
  41. void dataRead(const String & data)
  42. {
  43. BLINKER_LOG("Blinker readString: ", data);
  44. Blinker.vibrate();//按下APP按键产生震动
  45. uint32_t BlinkerTime = millis();
  46. Blinker.print("millis", BlinkerTime);
  47. }
  48. void setup()
  49. {
  50. Serial.begin(115200);//串口使得能
  51. BLINKER_DEBUG.stream(Serial);//blinker串口debug
  52. pinMode(led, OUTPUT);
  53. digitalWrite(led, LOW);
  54. pinMode(ServoPin, OUTPUT);
  55. digitalWrite(ServoPin, LOW);
  56. Blinker.begin(auth,ssid,pswd);//通过WiFi账号密码连接平台
  57. Blinker.attachData(dataRead);//反馈设备状态
  58. Button1.attach(button1_callback);//关联处理按钮函数
  59. Slider0.attach(slider0_callback);//关联滑动开关
  60. }
  61. void loop()
  62. {
  63. Blinker.run();//blinker运行 包括连接blinker云 MQTT协议
  64. //判断设备是否正常执行 正常就输入ip地址
  65. if (Blinker.connected() && !setup_camera)
  66. {
  67. setupCamera();
  68. setup_camera = true;
  69. Blinker.printObject("video", "{\"str\":\"mjpg\",\"url\":\"http://"+ WiFi.localIP().toString() + "\"}");
  70. }
  71. }
本文内容由网友自发贡献,转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/216286
推荐阅读
相关标签
  

闽ICP备14008679号