第一篇:最簡單DIY基于ESP32CAM的物聯網相機系統①(用網頁實作拍照圖傳)
第二篇:最簡單DIY基于ESP32CAM的物聯網相機系統②(在JAVAWEB服務器實作圖片查看器)
第三篇:最簡單DIY基于ESP32CAM的物聯網相機系統③(在JSP服務器圖傳相片給所有客戶端欣賞)
第四篇:最簡單DIY基于ESP32CAM的物聯網相機系統④(用除錯串口助手實作串口圖傳)
第五篇(上):最簡單DIY基于ESP32CAM的物聯網相機系統⑤(用1306OLED實作WIFI黑白屏照相機)
第五篇(下):最簡單DIY基于ESP32CAM的物聯網相機系統⑤(用C#上位機實作串口圖傳)
第六篇:最簡單DIY基于ESP32CAM的物聯網相機系統⑥(用上位機VS2013 MFC實作WIFI圖傳)
文章目錄
- 前言
- 一、最簡單DIY基于ESP32CAM的物聯網相機系統⑥(用上位機VS2013 MFC實作WIFI圖傳)是什么?
- 二、運行環境說明
- 1.PC軟體環境
- 2.單片機開發環境Arduino
- 3.修改上面2的原始碼變成自己的原始碼
- 三、運行與除錯
- 總結
前言
????daodanjishui物聯網核心原創技術之最簡單DIY基于ESP32CAM的物聯網相機系統⑥(用上位機VS2013 MFC實作WIFI圖傳),
????該專欄的第五篇博文(下):最簡單DIY基于ESP32CAM的物聯網相機系統④(用除錯串口助手實作串口圖傳) 實作的是用ESP32CAM用網頁控制拍攝照片通過串口傳輸到電腦的C#客戶端顯示圖片,其實這樣很麻煩,缺點就是:串口傳輸圖片的速度慢,還要有線連接,
????現在本文采用的是高速WIFI的方式傳輸圖片,ESP32通過總線采集出來的圖片在記憶體里面直接通過高速WIFI輸出到電腦MFC服務器上,那么可以通過ESP32CAM的嵌入式網頁來控制拍照和傳輸,因為ESP32CAM開發板上沒有可用的開關,所以我就還是采用一貫的風格,采用嵌入式網頁來實作拍照和上傳了,如果是做嵌入式影像處理的讀者,我稍微推薦借鑒我這次的開源方案,這個C++代碼跟C#不同的,適合老手修改達到二次開發,現在界面編程確實流行C#,因為根植于Windows系統,體積小,運行流暢,所以下載了我這個專案的原始碼的讀者,現在可以做一個基于ESP32CAM監控攝像頭監控之類的設計了,也可以學會影像傳輸和接收和編碼等熱門知識!
優酷視頻演示地址:https://v.youku.com/v_show/id_XNTE2NTI1NzU4MA==.html
ESP32CAM物聯網相機(用上位機VS2013 MFC實作WIFI圖傳)
請看看下面的效果圖(為了相機穩定我加了電源控制模塊輸出穩定的5V電壓):
一、最簡單DIY基于ESP32CAM的物聯網相機系統⑥(用上位機VS2013 MFC實作WIFI圖傳)是什么?
????這個MFC上位機確實不是我親自寫的,是一個免費開源的專案,在網上下載的,大家想免費的話自行去下載,附上免費下載鏈接:http://www.openedv.com/forum.php?mod=viewthread&tid=65762&highlight=%C9%E3%CF%F1%CD%B7%2B%C9%CF%CE%BB%BB%FA 代碼經過我整理,完美匹配我 本博文涉及到的硬體,所以硬體配置和使用可以去參考前幾篇博文的介紹,并且在原始碼的關鍵地方加上了我的注釋,但是這套上位機原始碼是用來接收智能小車發送的圖片的,后期也有可能用到我智能小車系列專案當中,現在我用來作為服務器無線WIFI接收我ESP32CAM相機拍攝的圖片,還是有一定的區別的, 因為這個專案的下位機單片機代碼跟前幾篇類似,只不過換了封面罷了,我的代碼都是一個系列的,上一個專案會與下個專案密切相關,
二、運行環境說明
1.PC軟體環境
????運行這個MFC工程需要用到VS2013軟體,我當時用的是VS2010這個軟體來開發OpenCV和C++和C#,后面也沒有更新過這個軟體,所以只能硬著頭皮在另一臺電腦安裝了VS2013,順便說一下,這個版本的軟體是真的龐大,占了不少硬碟空間,其實在網上稍微配置一下就可以實作在高版本的VS軟體上使用了,不過我也懶得去弄了,該MFC客戶端工程免費下載鏈接:http://www.openedv.com/forum.php?mod=viewthread&tid=65762&highlight=%C9%E3%CF%F1%CD%B7%2B%C9%CF%CE%BB%BB%FA
????下面順便談談該開源MFC代碼的故事:據我所知WIFI圖傳的MFC開源歷史要追溯到正點原子開源論壇2016-1-5 21:04:40 那是一個神圣的日子,一個無私奉獻的大神將他MFC原始碼奉獻給這個論壇,從此之后很多復制者就把這個代碼拿來賣了,我在這里不是賣,我賣的知是我原創的下位機客戶端,從那個時間以后,這么多年以來 正點原子論壇或者其他論壇,也沒有見如此靠譜的開源代碼了!打開這個代碼,不少標準的英文格式注釋,看起來國人無私奉獻的大神不是原創,可能是總結了幾個代碼模塊組合起來的,總的來說是一個復雜的原始碼,2021年我想寫一個最簡單DIY基于ESP32CAM的物聯網相機系統,才發現這個2016年產的開源客戶端和服務端,直接拿來作為服務器驗證我寫的相機程式,**甚至目前我也沒有完全看完該開源專案的原始碼,只是稍微修改了我原創的下位機ESP32CAM的原創開源代碼去匹配這個原始碼,從而實作WIFI高速圖傳,**說實話啃這個代碼啃得很辛苦,還不如我自己寫一個服務器出來,呵呵,還真的被我寫出了一個JAVA Swing GUI的圖傳系統出來,**下一期就開源我寫的java版的圖傳系統,**這個免費原始碼的精髓就是知道它是通過Socket傳輸jpg格式的檔案就可以了,通過修改我下位機的程式來匹配這個上位機服務器,我這個收費開源代碼值錢的地方不是服務器上位機,而是我對這個上位機和下位機配合使用的說明和見解,而是我的下位機單片機用http協議接收嵌入式主頁的ajax技術觸發的get請求,再用http請求傳輸圖片檔案給上位機socket長鏈接的服務器,這個明修堆疊道暗度陳倉的功能多少人想寫這個功能都寫不出來!魯迅筆下的“拿來主義”在我這里表現的淋漓盡致,這也是當代程式開發者高效撈金的真實寫照,
2.單片機開發環境Arduino
官方攝像頭原始碼路徑是(只要讀者正確安裝了ESP32開發環境,這個原始碼可以在Arduino里面按照下面截圖的方式打開的):
#include "esp_camera.h"
#include <WiFi.h>
//
// WARNING!!! PSRAM IC required for UXGA resolution and high JPEG quality
// Ensure ESP32 Wrover Module or other board with PSRAM is selected
// Partial images will be transmitted if image exceeds buffer size
//
// Select camera model
#define CAMERA_MODEL_WROVER_KIT // Has PSRAM
//#define CAMERA_MODEL_ESP_EYE // Has PSRAM
//#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM
//#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM
//#define CAMERA_MODEL_AI_THINKER // Has PSRAM
//#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM
#include "camera_pins.h"
const char* ssid = "*********";
const char* password = "*********";
void startCameraServer();
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
Serial.println();
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
// if PSRAM IC present, init with UXGA resolution and higher JPEG quality
// for larger pre-allocated frame buffer.
if(psramFound()){
config.frame_size = FRAMESIZE_UXGA;
config.jpeg_quality = 10;
config.fb_count = 2;
} else {
config.frame_size = FRAMESIZE_SVGA;
config.jpeg_quality = 12;
config.fb_count = 1;
}
#if defined(CAMERA_MODEL_ESP_EYE)
pinMode(13, INPUT_PULLUP);
pinMode(14, INPUT_PULLUP);
#endif
// camera init
esp_err_t err = esp_camera_init(&config);
if (err != ESP_OK) {
Serial.printf("Camera init failed with error 0x%x", err);
return;
}
sensor_t * s = esp_camera_sensor_get();
// initial sensors are flipped vertically and colors are a bit saturated
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1); // flip it back
s->set_brightness(s, 1); // up the brightness just a bit
s->set_saturation(s, -2); // lower the saturation
}
// drop down frame size for higher initial frame rate
s->set_framesize(s, FRAMESIZE_QVGA);
#if defined(CAMERA_MODEL_M5STACK_WIDE)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
startCameraServer();
Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
Serial.println("' to connect");
}
void loop() {
// put your main code here, to run repeatedly:
delay(10000);
}
3.修改上面2的原始碼變成自己的原始碼
需要全部工程原始碼的請到最后鏈接去下載了,想要自己寫出來,不簡單的,連MFC里面的C++代碼看得都犯迷糊了,不信讀者可以下載開源的MFC服務器看看,看看能不能寫一個下位機來匹配這個服務器完成圖傳,現在很多人都在說MFC C++技術是30年前流行用的技術,現在都用C#了,沒有必要去啃C++這個硬骨頭,確實我看這個C++代碼有點頭疼,不過實作要實作的功能,一點問題都沒有的,對個人而言,我反而喜歡用java去寫一些簡單的界面,復雜的界面我交給jsp網頁去實作,現在能聯網的界面一般都用網頁顯示了,這也是物聯網發展的潮流!據說鴻蒙系統的GUI是用JAVAScript來寫的,我相機的主頁也采用了JAVAScript觸發拍照和圖傳,所以到這里可以看到未來是腳本的天下,
三、運行與除錯
概括:用戶登錄CAM相機的主頁,通過相機的主頁,輸入服務器的IP地址和圖傳指令,點擊發送按鈕,就可以控制相機拍照上傳圖片給MFC圖傳服務器,服務器收到圖片之后就直接顯示出來,
(1)開機上電,相機連上無線路由器,根據串口列印相機的IP資訊,啟動MFC上位機打開其服務器的功能,生成服務器IP資訊,根據相機IP資訊用瀏覽器登錄相機的主頁,輸入服務器的IP地址,點擊send拍攝一張圖片并發送給服務器,輸入接收圖片服務器的IP地址之后點擊send按鈕 就可以看到紅色的 時間變化了,說明拍照上傳成功了,如果是失敗也會顯示出來的,讀者在這里可以學習到嵌入式服務器反饋技術,這是官方程式沒有的技術,
MFC服務器:IP地址是192.168.1.103 埠號是8080,埠號是自己輸入的,所以我輸入跟下位機匹配的埠號,開啟的是服務端的模式,讓客戶端CAM連上就可以傳圖了,
相機單片機的IP是192.168.104埠號是8081
注意:前提是所有聯網的設備都需要在同一個局域網實作,否則玩完!
(2)WIFI通信成功之后會在MFC的界面看到下面的影像:
(3)看看MFC除錯的界面列印的資訊,知道圖傳作業完成,
原來官方歷程的的功能保留供買家測驗:IP地址是192.168.1.104 埠是80,拍照和看視頻都OK,買家可以在這里找到官方歷程的味道,
除錯到此結束,根據結果可以滿足博文提出的要求,
總結
總結: 在這個專案,讀者可以學到很多技術,下載原始碼這點付出對于這些核心技術來說不值一提,學核心技術不花錢是有可能的,不過可能性不大,收費開源對得起我付出的努力撰寫此次博文,也對得起我深夜編碼付出的勞動,下一期將會推出全網獨家第一個ESP32CAM JAVA SWing GUI 技術撰寫的java版圖傳服務器,全部邏輯由我daodanjishui全部完成,歷時兩周時間研發成功,代碼精妙無比,后期會加上遠程MQTT控制和影像處理,擴展功能水到渠成,敬請期待,
代碼工程下載鏈接:https://www.cirmall.com/circuit/24701/
點我直接跳轉
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/295732.html
標籤:其他