ESP32-CAM,點燈云平臺Blinker,MQTT協(xié)議,APP控制,Wifi視頻監(jiān)控,點燈,控制舵機。
一 環(huán)境搭建
兩個寶藏網(wǎng)站
?點燈科技 (diandeng.tech)
軟件下載 - Arduino中文社區(qū)
第一次體驗Arduino
按照上面教程安裝ESP32固件包
語言改為中文
二 常用基本語法?
學過stm32再看Arduino代碼,有種看少兒編程的感覺哈哈哈?
串口println
用串口連接電腦,5V
RX-UoT
TX-UnR
IO0 需要連接 GND
工具=》選擇開發(fā)板=》esp32=》AIThinker ESP32-CAM
下面代碼為設置波特率
setup 可以理解為 main 函數(shù) while(1) 之前
loop 理解為 while(1) 里
loop內(nèi)循環(huán)打印字符串,?
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,打開串口監(jiān)視器,可看見循環(huán)打印字符串
點個燈
由圖可知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; //將角度轉(zhuǎn)化為500-2480的脈寬值
digitalWrite(ServoPin, HIGH); //將舵機接口電平至高
delayMicroseconds(pulsewidth); //延時脈寬值的微秒數(shù)
digitalWrite(ServoPin, LOW); //將舵機接口電平至低
delayMicroseconds(20000 - pulsewidth); //延時脈寬值的微秒數(shù)
}
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都連接上手機熱點,燒錄完成后,訪問串口提供的網(wǎng)址?
四 使用Blinker云平臺
監(jiān)控視頻傳輸
下載點燈科技云平臺APP,注冊,添加設備,選擇網(wǎng)絡設備,可以得到一個“密鑰”
例程選擇最下面的 Blinker 里的 Blinker_ESP32_CAM。
“密鑰”、Wifi和密碼,填入程序,?Blinker.begin()入?yún)ⅰ懊荑€”、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;
//反饋設備狀態(tài)
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();//按下APP按鍵產(chǎn)生震動
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);//反饋設備狀態(tài)
}
void loop()
{
Blinker.run();//blinker運行 包括連接blinker云 MQTT協(xié)議
//判斷設備是否正常執(zhí)行 正常就輸入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,輸入獲得的網(wǎng)址
[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
MQTT控燈
官網(wǎng)找到按鈕示例?
?點燈科技 (diandeng.tech)
?添加一個按鈕控制GPIO輸出,實現(xiàn)開燈關燈
#define BLINKER_WIFI
//#define BLINKER_ESP_SMARTCONFIG
#define led 4
#include <Blinker.h>
#include "ESP32_CAM_SERVER.h"
// 新建組件對象
BlinkerButton Button1("led");
// 按下按鍵即會執(zhí)行該函數(shù)
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;
//反饋設備狀態(tài)
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();//按下APP按鍵產(chǎn)生震動
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);//反饋設備狀態(tài)
Button1.attach(button1_callback);//關聯(lián)處理按鈕函數(shù)
}
添加按鈕和監(jiān)視器,按鈕內(nèi)容改為led與代碼一致?
?
MQTT控制舵機
一個最大值為180的滑塊。?
?文章來源:http://www.zghlxwxcb.cn/news/detail-632173.html
?完整代碼文章來源地址http://www.zghlxwxcb.cn/news/detail-632173.html
#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 滑塊 數(shù)據(jù)鍵名 舵機范圍0-180
//舵機控制代碼
void Myservo(int angle)
{
for (int i = 0; i < 5; i++) {
int pulsewidth = (angle * 11) + 500; //將角度轉(zhuǎn)化為500-2480的脈寬值
digitalWrite(ServoPin, HIGH); //將舵機接口電平至高
delayMicroseconds(pulsewidth); //延時脈寬值的微秒數(shù)
digitalWrite(ServoPin, LOW); //將舵機接口電平至低
delayMicroseconds(20000 - pulsewidth); //延時脈寬值的微秒數(shù)
}
delay(10);
}
//滑塊任務函數(shù)
void slider0_callback(int32_t value) //滑塊0
{
int servo=value;
Myservo(servo);//轉(zhuǎn)動角度}
}
// 按下按鍵即會執(zhí)行該函數(shù)
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;
//反饋設備狀態(tài)
void dataRead(const String & data)
{
BLINKER_LOG("Blinker readString: ", data);
Blinker.vibrate();//按下APP按鍵產(chǎn)生震動
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);//反饋設備狀態(tài)
Button1.attach(button1_callback);//關聯(lián)處理按鈕函數(shù)
Slider0.attach(slider0_callback);//關聯(lián)滑動開關
}
void loop()
{
Blinker.run();//blinker運行 包括連接blinker云 MQTT協(xié)議
//判斷設備是否正常執(zhí)行 正常就輸入ip地址
if (Blinker.connected() && !setup_camera)
{
setupCamera();
setup_camera = true;
Blinker.printObject("video", "{\"str\":\"mjpg\",\"url\":\"http://"+ WiFi.localIP().toString() + "\"}");
}
}
到了這里,關于ESP32-CAM ——Blinker平臺的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!