赞
踩
ESP32-CAM,点灯云平台Blinker,MQTT协议,APP控制,Wifi视频监控,点灯,控制舵机。
两个宝藏网站
第一次体验Arduino
按照上面教程安装ESP32固件包
语言改为中文
学过stm32再看Arduino代码,有种看少儿编程的感觉哈哈哈
用串口连接电脑,5V
RX-UoT
TX-UnR
IO0 需要连接 GND
工具=》选择开发板=》esp32=》AIThinker ESP32-CAM
下面代码为设置波特率
setup 可以理解为 main 函数 while(1) 之前
loop 理解为 while(1) 里
loop内循环打印字符串,
- void setup() {
- // put your setup code here, to run once:
- Serial.begin(115200);
- }
-
- void loop() {
- // put your main code here, to run repeatedly:
- Serial.println("hello world");
- }
选择端口,点击上传即可
一直显示Connecting就按一下reset
上传完毕,IO0 断开 GND,按下RESET,打开串口监视器,可看见循环打印字符串
由图可知GPIO4对应LED
文件=》例程
提供了很多模板,一看就懂
- int led = 4;
-
- // the setup function runs once when you press reset or power the board
- void setup() {
- // initialize digital pin LED_BUILTIN as an output.
- pinMode(led, OUTPUT);
- }
-
- // the loop function runs over and over again forever
- void loop() {
- digitalWrite(led, HIGH); // turn the LED on (HIGH is the voltage level)
- delay(1000); // wait for a second
- digitalWrite(led, LOW); // turn the LED off by making the voltage LOW
- delay(1000); // wait for a second
- }
GPIO12输出PWM
- #define ServoPin 12
-
- void Myservo(int angle)
- {
- for (int i = 0; i < 5; i++) {
- int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
- digitalWrite(ServoPin, HIGH); //将舵机接口电平至高
- delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
- digitalWrite(ServoPin, LOW); //将舵机接口电平至低
- delayMicroseconds(20000 - pulsewidth); //延时脉宽值的微秒数
- }
- delay(10);
- }
-
- // the setup function runs once when you press reset or power the board
- void setup() {
- // initialize digital pin LED_BUILTIN as an output.
- pinMode(ServoPin, OUTPUT);
- }
-
- // the loop function runs over and over again forever
- void loop() {
- Myservo(0);
- delay(1000); // wait for a second
- Myservo(45);
- delay(1000); // wait for a second
- Myservo(90);
- delay(1000); // wait for a second
- Myservo(135);
- delay(1000); // wait for a second
- Myservo(180);
- delay(1000); // wait for a second
- }

最后加了个if,软件过滤掉误差
- #define Echo 13
- #define Trag 15
-
- long gettime()
- {
- digitalWrite(Trag,HIGH);
- delayMicroseconds(10);
- digitalWrite(Trag,LOW);
-
- return pulseIn(Echo,HIGH);
- }
-
- // the setup function runs once when you press reset or power the board
- void setup() {
- // initialize digital pin LED_BUILTIN as an output.
- pinMode(Echo, INPUT);
- pinMode(Trag, OUTPUT);
- Serial.begin(115200);
- }
-
- // the loop function runs over and over again forever
- void loop() {
- long dis = gettime()/58;
- if(dis > 2) Serial.println(dis);
- }

前面都是小卡拉米,正戏这里开始。
先嫖个示例
改为使用 AI_THINKER ,Wifi名密码改成自己的手机热点
- // ===================
- // Select camera model
- // ===================
- //#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
- //#define CAMERA_MODEL_ESP_EYE // Has PSRAM
- //#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
- //#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
- //#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM
- //#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
- //#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM
- //#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM
- #define CAMERA_MODEL_AI_THINKER // Has PSRAM
- //#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
- //#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM
- // ** Espressif Internal Boards **
- //#define CAMERA_MODEL_ESP32_CAM_BOARD
- //#define CAMERA_MODEL_ESP32S2_CAM_BOARD
- //#define CAMERA_MODEL_ESP32S3_CAM_LCD
-
- #include "camera_pins.h"
-
- // ===========================
- // Enter your WiFi credentials
- // ===========================
- const char* ssid = "IQOO 5";
- const char* password = "88888888";

- clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
- mode:DIO, clock div:1
- load:0x3fff0018,len:4
- load:0x3fff001c,len:1216
- ho 0 tail 12 room 4
- load:0x40078000,len:10944
- load:0x40080400,len:6388
- entry 0x400806b4
- E (79) psram: PSRAM ID read error: 0xffffffff
-
- .......
- WiFi connected
- Starting web server on port: '80'
- Starting stream server on port: '81'
- Camera Ready! Use 'http://192.168.100.9' to connect
电脑和cam都连接上手机热点,烧录完成后,访问串口提供的网址
下载点灯科技云平台APP,注册,添加设备,选择网络设备,可以得到一个“密钥”
例程选择最下面的 Blinker 里的 Blinker_ESP32_CAM。
“密钥”、Wifi和密码,填入程序, Blinker.begin()入参“密钥”、Wifi和密码
- #define BLINKER_WIFI
- //#define BLINKER_ESP_SMARTCONFIG
-
- #include <Blinker.h>
- #include "ESP32_CAM_SERVER.h"
-
- //blinker提供的密钥,WiFi名密码
- char auth[] = "8578f8f1626f";
- char ssid[] = "iQOO 5";
- char pswd[] = "88888888";
- //默认摄像头不开启
- bool setup_camera = false;
- //反馈设备状态
- void dataRead(const String & data)
- {
- BLINKER_LOG("Blinker readString: ", data);
-
- Blinker.vibrate();//按下APP按键产生震动
-
- uint32_t BlinkerTime = millis();
-
- Blinker.print("millis", BlinkerTime);
- }
-
- void setup()
- {
- Serial.begin(115200);//串口使得能
- BLINKER_DEBUG.stream(Serial);//blinker串口debug
-
- pinMode(LED_BUILTIN, OUTPUT);
- digitalWrite(LED_BUILTIN, LOW);
-
- Blinker.begin(auth,ssid,pswd);//通过WiFi账号密码连接平台
- Blinker.attachData(dataRead);//反馈设备状态
- }
-
- void loop()
- {
- Blinker.run();//blinker运行 包括连接blinker云 MQTT协议
- //判断设备是否正常执行 正常就输入ip地址
- if (Blinker.connected() && !setup_camera)
- {
- setupCamera();
- setup_camera = true;
-
- Blinker.printObject("video", "{\"str\":\"mjpg\",\"url\":\"http://"+ WiFi.localIP().toString() + "\"}");
- }
- }

编译出错 exit status 1 就把Blinker库卸载重新导入,去除原zip名里的防重“(1)”这种
APP添加一个“视频”,mjpg,输入获得的网址
- [2786] WiFi Connected.
- [2786] IP Address:
- [2786] 192.168.100.9
- [4410] Freeheap: 177596
- [4414] mDNS responder started
- [4417] webSocket_MQTT server started
- [4417] ws://DAFE7962GYXI01DUHFFY724S.local:81
官网找到按钮示例
添加一个按钮控制GPIO输出,实现开灯关灯
-
- #define BLINKER_WIFI
- //#define BLINKER_ESP_SMARTCONFIG
-
- #define led 4
-
- #include <Blinker.h>
- #include "ESP32_CAM_SERVER.h"
-
- // 新建组件对象
- BlinkerButton Button1("led");
-
- // 按下按键即会执行该函数
- void button1_callback(const String & state) {
- BLINKER_LOG("get button state: ", state);
- digitalWrite(led, !digitalRead(led));
- }
-
- //blinker提供的密钥,WiFi名密码
- char auth[] = "8578f8f1626f";
- char ssid[] = "iQOO 5";
- char pswd[] = "88888888";
- //默认摄像头不开启
- bool setup_camera = false;
- //反馈设备状态
- void dataRead(const String & data)
- {
- BLINKER_LOG("Blinker readString: ", data);
-
- Blinker.vibrate();//按下APP按键产生震动
-
- uint32_t BlinkerTime = millis();
-
- Blinker.print("millis", BlinkerTime);
- }
-
- void setup()
- {
- Serial.begin(115200);//串口使得能
- BLINKER_DEBUG.stream(Serial);//blinker串口debug
-
- pinMode(led, OUTPUT);
- digitalWrite(led, LOW);
-
- Blinker.begin(auth,ssid,pswd);//通过WiFi账号密码连接平台
- Blinker.attachData(dataRead);//反馈设备状态
- Button1.attach(button1_callback);//关联处理按钮函数
- }

添加按钮和监视器,按钮内容改为led与代码一致
一个最大值为180的滑块。
完整代码
- #define BLINKER_WIFI
- //#define BLINKER_ESP_SMARTCONFIG
-
- #define led 4
- #define ServoPin 12 //控制舵机
-
- #include <Blinker.h>
- #include "ESP32_CAM_SERVER.h"
-
- // 新建组件对象
- BlinkerButton Button1("led");
- // 新建组件对象
- BlinkerSlider Slider0("duoji"); //位置0-3 滑块 数据键名 舵机范围0-180
-
- //舵机控制代码
- void Myservo(int angle)
- {
- for (int i = 0; i < 5; i++) {
- int pulsewidth = (angle * 11) + 500; //将角度转化为500-2480的脉宽值
- digitalWrite(ServoPin, HIGH); //将舵机接口电平至高
- delayMicroseconds(pulsewidth); //延时脉宽值的微秒数
- digitalWrite(ServoPin, LOW); //将舵机接口电平至低
- delayMicroseconds(20000 - pulsewidth); //延时脉宽值的微秒数
- }
- delay(10);
- }
-
- //滑块任务函数
- void slider0_callback(int32_t value) //滑块0
- {
- int servo=value;
- Myservo(servo);//转动角度}
- }
-
- // 按下按键即会执行该函数
- void button1_callback(const String & state) {
- BLINKER_LOG("get button state: ", state);
- digitalWrite(led, !digitalRead(led));
- }
-
- //blinker提供的密钥,WiFi名密码
- char auth[] = "8578f8f1626f";
- char ssid[] = "iQOO 5";
- char pswd[] = "88888888";
- //默认摄像头不开启
- bool setup_camera = false;
- //反馈设备状态
- void dataRead(const String & data)
- {
- BLINKER_LOG("Blinker readString: ", data);
-
- Blinker.vibrate();//按下APP按键产生震动
-
- uint32_t BlinkerTime = millis();
-
- Blinker.print("millis", BlinkerTime);
- }
-
-
- void setup()
- {
- Serial.begin(115200);//串口使得能
- BLINKER_DEBUG.stream(Serial);//blinker串口debug
-
- pinMode(led, OUTPUT);
- digitalWrite(led, LOW);
-
- pinMode(ServoPin, OUTPUT);
- digitalWrite(ServoPin, LOW);
-
- Blinker.begin(auth,ssid,pswd);//通过WiFi账号密码连接平台
- Blinker.attachData(dataRead);//反馈设备状态
- Button1.attach(button1_callback);//关联处理按钮函数
- Slider0.attach(slider0_callback);//关联滑动开关
-
- }
-
- void loop()
- {
- Blinker.run();//blinker运行 包括连接blinker云 MQTT协议
- //判断设备是否正常执行 正常就输入ip地址
- if (Blinker.connected() && !setup_camera)
- {
- setupCamera();
- setup_camera = true;
-
- Blinker.printObject("video", "{\"str\":\"mjpg\",\"url\":\"http://"+ WiFi.localIP().toString() + "\"}");
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。