自制ESP32cam远程控制浇水系统Word文档下载推荐.docx

上传人:b****5 文档编号:8341536 上传时间:2023-05-11 格式:DOCX 页数:49 大小:3.26MB
下载 相关 举报
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第1页
第1页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第2页
第2页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第3页
第3页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第4页
第4页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第5页
第5页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第6页
第6页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第7页
第7页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第8页
第8页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第9页
第9页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第10页
第10页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第11页
第11页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第12页
第12页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第13页
第13页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第14页
第14页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第15页
第15页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第16页
第16页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第17页
第17页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第18页
第18页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第19页
第19页 / 共49页
自制ESP32cam远程控制浇水系统Word文档下载推荐.docx_第20页
第20页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

自制ESP32cam远程控制浇水系统Word文档下载推荐.docx

《自制ESP32cam远程控制浇水系统Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《自制ESP32cam远程控制浇水系统Word文档下载推荐.docx(49页珍藏版)》请在冰点文库上搜索。

自制ESP32cam远程控制浇水系统Word文档下载推荐.docx

用杜邦线连接ESP32-CamGPIO13和图示中的口。

5V电压输入、GND和ESP32-Cam的电源共用。

12V电压输入和12输出串联在蓄电池和电磁阀之间。

5V的电源可以是12V蓄电池降压得到。

这样12V电磁阀和5V的ESP32-Cam、继电器可以共用一个电源。

如果想用家里的充电宝提供5V电源,用USBDip接头可以插入充电宝,为5V的ESP32-Cam、继电器供电,12V的电磁阀单独由蓄电池供电。

ESP-Cam中的程序控制GPO13端口输入高电平,低电平来控制继电器开和关。

这款继电器输入高电平时是关闭的,输入低电平是打开的。

降压器使用

水接线

水接线是个体力活,雾化喷头按购买的说明结合自家的花草情况进行部署。

电池阀的水接方法:

Arduino程序

Arduino环境准备

1.Arduino可以官网下载,安装Arduino,我用的是1.8.12版本。

2.安装ESP32开发组建:

esp32_package_v1_0_2.exe可以网上找,找不到可以QQ我发,直接运行

3.Arduino要打ESP32_AzureIoT_Arduino补丁

ESP32_AzureIoT_Arduino.zip解压到

C:

\Users\admin\Documents\Arduino\hardware\espressif\esp32\libraries\AzureIoT

4.安装ESP32开发库,需要安装的库如下:

ArduinoJson-5.11.2.zip--JSON操作包

time-master.zip--时间包

CH341SER.ZIP--寄存器操作,存储wifi和服务地址

加载库如下页面操作:

设置:

烧入程序:

按上面的接线完毕后,TTLUSB插入电脑USB,电脑打开Arduino,打开Waiter程序,点击写入就可以。

#include"

esp_camera.h"

#include<

TimeLib.h>

WiFi.h>

ArduinoJson.h>

EEPROM.h>

#defineCAMERA_MODEL_AI_THINKER//指定摄像头的模式,只能用这种

camera_pins.h"

#definerelay13//ESP32指定继电器的控制针脚

booleansaveElc=true;

//是否开启省点模式,只有在一个时间开启服务

StringstartTimeOfDay="

6:

30:

00,18:

00"

;

//每天开启时间,逗号分割可以多个,这个取决于服务端的逻辑控制。

StringendTimeOfDay="

7:

00:

00,19:

//每天关闭时间

intdefaultStatus=HIGH;

//默认继电器是高电平,关闭状态。

WiFiServerserver(8080);

//ap模式下的服务端口,用于刚开始时设置wifi的密码和应用程序地址

//----wificonnectionandsyncdatatoiotserver

StringobjName="

water"

//设备类型

StringuserName="

Wong"

//用户名称

StringloginAcct="

WFIOT"

//服务端用户帐号

StringseqNum="

01"

//设备序列

StringuserId="

1111000"

//用户编号

StringmacAds;

intiotPort;

StringiotIp;

StringnetIp;

//web服务端需要有以下API接口用于和该设备通信和控制。

Web服务部署在Wifi局域网内。

StringiotCheckUrl="

addIotUser"

//服务端需要有的API名称,创建用户并检查用户是否存在。

StringiotSleepTime="

getSleepSeconds"

//获取休眠的时长,单位秒。

StringiotServiceUrl="

getIotData"

//设备获取服务端的指令,如关闭继电器,开启继电器。

StringiotUpdateServiceUrl="

updateIotData"

//设备断电重启时更新WifiIP到服务端。

intprocessStatus=0;

intrecovercount=0;

Stringssid;

Stringpwd;

structconfig_type

{

chariotIp[24];

//定义配网得到的WIFI密码长度(最大64字节)

chariotPort[12];

charssid[24];

charpwd[24];

};

config_typecfg;

//web服务端存储的设备记录信息。

StringgetDesc(){

return"

{\"

iot_object\"

:

\"

"

+objName+"

"

+"

iot_object_mac\"

+macAds+"

iot_data\"

+getIotData()+"

user_name\"

+userName+"

user_obj_seq\"

+seqNum+"

user_id\"

+userId+"

net_ip\"

+netIp+"

app_ip\"

+iotIp+"

is_sleep\"

+saveElc+"

start_time\"

+startTimeOfDay+"

end_time\"

+endTimeOfDay+"

app_port\"

+String(iotPort)+"

register_srv\"

+iotCheckUrl+"

sync_data_srv\"

+iotServiceUrl+"

login_code\"

+loginAcct+"

}"

}

//请求web服务的路径

StringgetIotData(){

return"

{imageUrl:

['

http:

//"

/control?

var=framesize&

val=6'

'

/capture?

_cb=1593852828143'

],relay:

'

OFF'

voidloadConfig()//读取函数

EEPROM.begin(1024);

uint8_t*p=(uint8_t*)(&

cfg);

for(inti=0;

i<

sizeof(cfg);

i++)

{

*(p+i)=EEPROM.read(i);

}

EEPROM.commit();

voidsaveConfig()//保存函数

Serial.println("

saveConfig..."

);

//向系统申请1024kbROM

//开始写入

EEPROM.write(i,*(p+i));

//在闪存内模拟写入

//执行写入ROM

intsetup_connectWifi(Stringssid,Stringpwd,StringlocalhostName){

if(ssid!

="

&

&

pwd!

){

WiFi.begin(ssid.c_str(),pwd.c_str());

}else{

WiFi.begin();

intn=0;

while(WiFi.status()!

=WL_CONNECTED){

delay(100);

n++;

if(n>

100){

Serial.print("

Connected"

+ssid+"

fail"

return0;

."

netIp=String(WiFi.localIP()[0])+"

+String(WiFi.localIP()[1])+"

+String(WiFi.localIP()[2])+"

+String(WiFi.localIP()[3]);

connectedworkwifi"

by"

+ssid);

if(iotIp){

setMac();

Stringtxt=sendHtmlPost(iotIp,iotPort,iotUpdateServiceUrl,"

\"

Serial.println(txt);

return1;

voidsetMac(){

bytemac[6];

WiFi.macAddress(mac);

macAds=String(mac[5])+"

+String(mac[4])+"

+String(mac[3])+"

+String(mac[2])+"

+String(mac[1])+"

+String(mac[0]);

voidstartReg(){

processStatus=1;

setup_wifiAP_STA();

setup_server();

}

voidsetup_wifiAP_STA(){

beginsetap..."

IPAddresslxip(192,168,2,1);

IPAddresslxip1(192,168,2,1);

IPAddresslxip2(255,255,255,0);

mac:

+macAds);

Stringssid=String("

TB_IOT-"

)+userName+"

"

+objName+seqNum;

Stringpassword="

WiFi.mode(WIFI_AP_STA);

WiFi.softAPConfig(lxip,lxip1,lxip2);

WiFi.softAP(ssid.c_str(),password.c_str(),1);

finishedsetap,pleaseconnect"

Serial.print(WiFi.softAPIP());

8080"

voidsetup_server(){

server.begin();

startedhttpserver"

booleanparseServerRequest(){

WiFiClientclient=server.available();

if(client){

[Clientconnected]"

StringfirstLine;

Stringresposnehtml;

intishead=1;

booleanflag=false;

while(!

client.connected()||!

client.available()){

delay

(1);

100){

[serverwaittimeout]"

client.stop();

returnfalse;

while(client.connected()||client.available()){

if(client.available()){

Stringline=client.readStringUntil('

\r'

Serial.println(line);

if(firstLine==NULL){

firstLine=line;

//getwifiinfo...GET/queryServerList?

ssid=wf&

password=144565HTTP/1.1

Stringpars[5];

parseHtmlQueryString(firstLine,pars);

Stringtype=pars[0];

if(type=="

home"

resposnehtml=homePage("

}elseif(type=="

queryServerList"

//parseOutssidpassword

if(pars[1]!

=NULL&

pars[2]!

pars[3]!

=NULL){

intret=setup_connectWifi(pars[1],pars[2],objName+seqNum);

if(ret==1){

Stringdata=checkAndUpdateDesc(pars[3],pars[4].toInt(),iotCheckUrl,iotServiceUrl,getDesc());

Stringf=data.substring(0,1);

Stringmsg=data.substring

(1);

if(f=="

Y"

resposnehtml=successHtml(msg);

//successclosewindow

flag=true;

connectiotserverfail.<

br/>

+msg,pars[1],pars[2],pars[3],pars[4]);

SSID,Passwordfail,can'

tconnectwifi,pleasecheck"

pars[1],pars[2],pars[3],pars[4]);

SSID,Password,IotIPisnull,pleasecheck"

if(resposnehtml!

=NULL){

//Serial.println(client.status());

if(client.connected()){

response:

+resposnehtml);

client.println(resposnehtml);

client.flush();

delay(1000);

[Clientdisonnected]"

if(flag){

WiFi.mode(WIFI_STA);

setwifimodeSTA"

if(setup_connectWifi(pars[1],pars[2],objName+seqNum)==1){

connected"

+pars[1]);

processStatus=0;

strcpy(cfg.iotIp,pars[3].c_str());

strcpy(cfg.iotPort,pars[4].c_str());

strcpy(cfg.ssid,pars[1].c_str());

strcpy(cfg.pwd,pars[2].c_str());

Stringt=cfg.iotIp;

saveConfig();

WiFi.setAutoConnect(true);

savedconfigdatatocash"

can'

tconnectwifi"

returntrue;

break;

[Clientdisonnected2]"

voidparseHtmlQueryString(Stringqstring,String*ret){

Stringtxt=GetRidOfurlCharacters(qstring);

Stringurl=txt.substring(txt.indexOf("

/"

)+1,txt.indexOf("

\r"

));

intn=url.indexOf("

?

if(n!

=-1){

Stringa=url.substring(0,url.indexOf("

ret[0]=a;

Stringq=url.substring(url.indexOf("

)+1,url.indexOf("

HTTP"

ret[1]=q.substring(q.indexOf("

ssid="

)+5,q.indexOf("

p"

ret[2]=q.substring(q.indexOf("

password="

)+9,q.indexOf("

ioti"

ret[3]=q.substring(q.indexOf("

iotip="

)+6,q.indexOf("

iotp"

ret[4]=q.substring(q.indexOf("

iotport="

)+8,q.indexOf("

iotIp=ret[3];

iotPort=ret[4].toInt();

ret[0]="

0:

+ret[0]);

1:

+ret[1]);

2:

+ret[2]);

3:

+ret[3]);

StringGetRidOfurlCharacters(StringurlChars)

urlChars.replace("

%0D%0A"

String('

\n'

+"

"

%20"

%21"

!

%22"

String(char('

)));

%23"

#"

%24"

$"

%25"

%"

%26"

%26%2365281%3B"

%27"

String(char(39)));

%28"

("

%29"

)"

%2A"

*"

urlChars.rep

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2