一、溫濕度和光敏數(shù)據(jù)采集。要求:采集ESP8266平臺(tái)中溫濕度傳感器與光敏電阻的數(shù)據(jù)并傳輸至網(wǎng)頁(yè)端顯示。
(1)分別對(duì)應(yīng)溫濕度傳感器及光敏傳感器的功能繪制或展示硬件連接原理圖并簡(jiǎn)單說(shuō)明。
?
光敏電路:光敏電路,實(shí)現(xiàn)感光效果
?
溫濕度(DHT11)電路:測(cè)量溫濕度
(2)溫濕度及光敏數(shù)據(jù)采集的關(guān)鍵代碼列舉并添加必要注釋。
//溫濕度傳感
static void COM(void)??? // 溫濕寫(xiě)入
{
??? uchar i;
??? for(i=0;i<8;i++)
??? {
??????? ucharFLAG=2;
??????? while((getData()==0)&&ucharFLAG++) os_delay_us(10);
??????? os_delay_us(35);
??????? uchartemp=0;
??????? if(getData()==1) uchartemp=1;
??????? ucharFLAG=2;
??????? while((getData()==1)&&ucharFLAG++) os_delay_us(10);
??????? if(ucharFLAG==1)break;
??????? ucharcomdata<<=1;
??????? ucharcomdata|=uchartemp;
??? }
}
void ICACHE_FLASH_ATTR SoftTimerCb12(void *arg)
{
??? uint16 adc;
??? uint16 v=0;
??? adc=system_adc_read();//讀取ADC中的數(shù)值
??? v=(adc*1000)/1024;//將讀取的數(shù)值轉(zhuǎn)化為電壓值
??? DHT11();//溫濕度讀取
??? os_sprintf(data.wendu,"%d",wendu);
??? os_sprintf(data.shidu,"%d",shidu);
??? os_sprintf(data.guangzhao,"%d",v);
??? os_printf("data.wendu:%s,wendu:%d\n",data.wendu,wendu);
??? os_printf("data.shidu:%s,shidu:%d\n",data.shidu,shidu);
??? os_printf("adc:%d.電壓:%d mV\r\n",adc, v);
??? //os_printf("DTH11 H:%d,T:%d\r\n",shidu,wendu);
}
(3)網(wǎng)絡(luò)模式控制、回調(diào)函數(shù)代碼設(shè)計(jì)及注釋。???
LOCAL struct espconn esp_conn;
??? //初始化espconn參數(shù)
??? esp_conn.type=ESPCONN_TCP;
??? esp_conn.state=ESPCONN_NONE;
??? esp_conn.proto.tcp=(esp_tcp *)os_malloc(sizeof(esp_tcp));
??? os_memcpy(esp_conn.proto.tcp->local_ip,local_ip,4);
??? esp_conn.proto.tcp->local_port=port;
??? esp_conn.proto.tcp->connect_callback=server_listen;//連接成功回調(diào)函數(shù)
??? esp_conn.proto.tcp->reconnect_callback=server_recon;//重連回調(diào)函數(shù)
??? esp_conn.proto.tcp->disconnect_callback=server_discon;//斷開(kāi)連接回調(diào)函數(shù)
??? esp_conn.recv_callback=server_recv;//接收到數(shù)據(jù)回調(diào)函數(shù)
??? esp_conn.sent_callback=server_sent;//發(fā)送成功回調(diào)函數(shù)
??? //建立TCP service,開(kāi)始監(jiān)聽(tīng)
??? espconn_accept(&esp_conn);
(4)數(shù)據(jù)載入設(shè)置(截圖)。
void ICACHE_FLASH_ATTR data_send(void *arg,bool response_OK,char *psend){
??? char httphead[256];
??? char *pbuf=NULL;
??? uint16 length;
??? struct espconn *pespconn=arg;
??? if(response_OK){
?????? os_sprintf(httphead,"HTTP/1.1 200 OK\r\nContent-Length: %d\r\nServer: lwIP/1.4.0\r\n",psend ? os_strlen(psend) : 0);
?????? if(psend)
?????? {
?????????? os_sprintf(httphead+strlen(httphead),"Content-Type: text/html; charset=utf-8\r\nPragma: no-cache\r\nAccess-Control-Allow-Origin: *\r\n\r\n");
?????????? length=os_strlen(httphead)+os_strlen(psend);
?????????? pbuf=(char *)os_zalloc(length+1);
?????????? os_memcpy(pbuf,httphead,os_strlen(httphead));
?????????? os_memcpy(pbuf+os_strlen(httphead),psend,os_strlen(psend));
?????? }else{
?????????? os_sprintf(httphead+os_strlen(httphead),"\r\n");
?????????? length=os_strlen(httphead);
?????? }
??? }else{
?????? os_sprintf(httphead,"HTTP/1.1 400 BadRequest\r\nContent-Length: 0\r\nServer: lwIP/1.4.0\r\n");
?????? length=os_strlen(httphead);
??? }
??? if(psend)
??? {
?????? os_printf("收到:%s",pbuf);
?????? os_printf(":");
?????? espconn_sent(pespconn,pbuf,length);
??? }else
??? {
?????? espconn_sent(pespconn,httphead,length);
??? }
??? if(pbuf){
?????? os_free(pbuf);
?????? pbuf=NULL;
??? }
}
(5)服務(wù)器功能數(shù)據(jù)發(fā)送核心代碼列舉并添加必要注釋。
PA=strstr(precv,"Red");
??? if(PA==NULL)
?????? return false;
??? PA+=4;
??? PB=strstr(PA,"&");
??? if(PB==NULL)
?????? return false;
??? os_memcpy(status,PA,PB-PA);
??? red=atoi(status);
??? PA=strstr(precv,"Blue");
??? if(PA==NULL)
?????? return false;
??? PA+=5;
??? PB=strstr(PA,"&");
??? if(PB==NULL)
?????? return false;
??? os_memcpy(status,PA,PB-PA);
??? blue=atoi(status);
??? PA=strstr(precv,"Green");
??? if(PA==NULL)
?????? return false;
??? PA+=6;
??? PB=strstr(PA,"&");
??? if(PB==NULL)
?????? return false;
??? os_memcpy(status,PA,PB-PA);
??? green=atoi(status);
(6)串口調(diào)試截圖。
?
(7)網(wǎng)頁(yè)設(shè)計(jì)的布局(截圖)及html代碼。
<html><head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<title>室內(nèi)環(huán)境</title>
<meta name='viewport' content='width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0'/>
<style type="text/css">
.button {
? background-color: #4CAF50; /* Bule */
? border: none;
? color: white;
? padding: 15px 32px;
? text-align: center;
? text-decoration: none;
? display: inline-block;
? font-size: 16px;
}
</style>
<div>
<br><br><br>
<h1>室內(nèi)環(huán)境監(jiān)控系統(tǒng)</h1>
? <button class="button" onclick="send(0)">開(kāi)燈</button>
? <button class="button" onclick="send(1)">關(guān)燈</button><BR>
?? <button class="button" onclick="send(2)">開(kāi)蜂鳴器</button>
? <button class="button" onclick="send(3)">關(guān)蜂鳴器</button><BR>
? <button class="button" onclick="send(4)">開(kāi)繼電器</button>
? <button class="button" onclick="send(5)">關(guān)繼電器</button><BR>
?
? <tr>
??? <td>紅LED:</td>
??? <td><input name="Red"? value="" id="Red" /></td>
? </tr>
?????? <tr>
??? <td>藍(lán)LED:</td>
??? <td><input name="Bule" type="text" value="" id="Bule" /></td>
? </tr>
? <tr>
? <tr>
??? <td>綠LED:</td>
??? <td><input name="Green" type="text" value="" id="Green" /></td>
? </tr>
??? <button class="button" onclick="submit()">提交</button>
</tr>
</div>
?<br>
<div><h2>
? 溫度: <span id="temp_val">0</span>
? <span id="Tdanwei"> ℃</span><br><br>
?? 濕度: <span id="humi_val">0</span>
? <span id="Hdanwei"> %RH</span><br><br>
?
???? 光照: <span id="guangzhao">0</span>
? <span id="Gdanwei"> H</span><br><br>
?
? LED 狀態(tài): <span id="state">滅</span>
</h2>
</div>
<script>
let status=false;
let status1=false;
let status2=false;
let status3=false;
function submit()
{
var xhttp = new XMLHttpRequest();
? xhttp.onreadystatechange = function() {
??? if (this.readyState == 4 && this.status == 200) {
????
??? }
? };
? xhttp.open("POST","LED&"+document.getElementById("Red").value+"N"+
? document.getElementById("Bule").value+"M"+
? document.getElementById("Green").value+"$", true);
? xhttp.send();
}
function send(led_sts)
{
? var xhttp = new XMLHttpRequest();
? xhttp.onreadystatechange = function() {
??? if (this.readyState == 4 && this.status == 200) {
????? document.getElementById("state").innerHTML = this.responseText;
????? if(this.responseText=="亮")
????? {
????? ?? window.alert('LED燈已打開(kāi)!');
????? }
????? else if(this.responseText=="滅")
????? {
????? ?? window.alert('LED燈已關(guān)閉!');
????? }
????? else
????? {
????? ??
????? }
??? }
? };
? xhttp.open("POST",led_sts, true);
? xhttp.send();
}
function getTempData() {
if(status)x.abort();
? var xhttp = new XMLHttpRequest();
status=true;
? xhttp.onreadystatechange = function() {
??? if (this.readyState == 4 && this.status == 200) {
status=false;
????? document.getElementById("temp_val").innerHTML =
????? this.responseText;
??? }
? };
? xhttp.open("GET", "tempread", true);
? xhttp.send();
}
function getHumiData() {
if(status1)x.abort();
? var xhttp = new XMLHttpRequest();
status1=true;
? xhttp.onreadystatechange = function() {
??? if (this.readyState == 4 && this.status == 200) {
status1=false;
????? document.getElementById("humi_val").innerHTML =
????? this.responseText;
??? }
? };
? xhttp.open("GET", "humiread", true);
? xhttp.send();
}
function getGuangzhaoData() {
if(status2)x.abort();
? var xhttp = new XMLHttpRequest();
status2=true;
? xhttp.onreadystatechange = function() {
??? if (this.readyState == 4 && this.status == 200) {
status2=false;
????? document.getElementById("guangzhao").innerHTML =
????? this.responseText;
??? }
? };
? xhttp.open("GET", "guangzhao", true);
? xhttp.send();
}
</script>
</body>
</html>
二、LED彩色顯示控制。設(shè)計(jì)網(wǎng)頁(yè),輸入紅、綠、藍(lán)的顏色強(qiáng)度數(shù)值,點(diǎn)擊按鈕提交;ESP8266平臺(tái)可以接收到網(wǎng)頁(yè)端的數(shù)據(jù)并設(shè)置對(duì)應(yīng)的顏色顯示。
(1)對(duì)LED的硬件連接繪制或展示硬件連接原理圖并簡(jiǎn)單說(shuō)明。
?
彩燈電路:R、G、B三色彩燈模塊
(2)LED輸出功能實(shí)現(xiàn)核心代碼及注釋。
void CtrlRGB_R(uint8 level){
??? uint32 duty=0;
??? duty=(22222*level)/255;
??? pwm_set_duty(duty,0);//
??? pwm_start();
}
void CtrlRGB_G(uint8 level){
??? uint32 duty=0;
??? duty=(22222*level)/255;
??? pwm_set_duty(duty,1);//
??? pwm_start();
}
void CtrlRGB_B(uint8 level){
??? uint32 duty=0;
??? duty=(22222*level)/255;
??? pwm_set_duty(duty,2);//
??? pwm_start();
}
(3)定時(shí)器功能及PWM實(shí)現(xiàn)的核心代碼與注釋。
void RGB_init(){
??? //初始化GPIO12,GPIO13,GPIO15
??? //在這里使用PWM控制
??? uint32 pwm_duty_init[3]={0};
??? uint32 io_info[][3]={{PERIPHS_IO_MUX_MTDI_U,FUNC_GPIO12,12},//red
???????????????????? {PERIPHS_IO_MUX_MTCK_U,FUNC_GPIO13,13},//green
???????????????????? {PERIPHS_IO_MUX_MTDO_U,FUNC_GPIO15,15}};//blue
??? pwm_init(1000,pwm_duty_init,3,io_info);
??? //默認(rèn)關(guān)閉RGB燈
??? CtrlRGB_R(0);
??? CtrlRGB_G(0);
??? CtrlRGB_B(0);
}
void delay(int ms)
{
??? int i=0;
??? for(i=0; i<ms; i++)
?????? os_delay_us(1000);
}
(4)網(wǎng)頁(yè)設(shè)計(jì)的布局(截圖)、標(biāo)題設(shè)計(jì)及html代碼。
?
<tr>
??? <td>紅LED:</td>
??? <td><input name="Red"? value="" id="Red" /></td>
? </tr>
?????? <tr>
??? <td>藍(lán)LED:</td>
??? <td><input name="Bule" type="text" value="" id="Bule" /></td>
? </tr>
? <tr>
? <tr>
??? <td>綠LED:</td>
??? <td><input name="Green" type="text" value="" id="Green" /></td>
? </tr>
??? <button class="button" onclick="submit()">提交</button>
三、繼電器和蜂鳴器控制。設(shè)計(jì)網(wǎng)頁(yè),使用按鈕或單選控件實(shí)現(xiàn)對(duì)ESP8266平臺(tái)的繼電器與蜂鳴器的通斷控制。
(1)對(duì)繼電器的硬件連接繪制或展示硬件連接原理圖并簡(jiǎn)單說(shuō)明。
?
繼電器電路:通過(guò)二個(gè)NPN三級(jí)管驅(qū)動(dòng)的,從原理圖上看,GPIO16輸出高電平的時(shí)候,Q3導(dǎo)通Q2截止,繼電器關(guān)閉;GPIO16輸出低電平的時(shí)候,Q3截止Q2導(dǎo)通,繼電器工作。
(2)繼電器功能實(shí)現(xiàn)核心代碼及注釋。
void relay_init(){
??? //繼電器接在gpio16上
??? gpio16_output_conf();
??? //繼電器是低電平觸發(fā),
??? //這里輸出高電平關(guān)閉
??? gpio16_output_set(1);
}
(3)對(duì)蜂鳴器的硬件連接繪制或展示硬件連接原理圖并簡(jiǎn)單說(shuō)明。
?
蜂鳴器:GPIO14 輸出高電平的時(shí)候, PNP 三極管截止, 有源蜂鳴器不響, GPIO14 輸出低電平的時(shí)候, PNP 三極管導(dǎo)通, 有源蜂鳴器響。
(4)蜂鳴器功能實(shí)現(xiàn)核心代碼及注釋。
void buzzer_init(){
??? //蜂鳴器接在gpio14上
??? PIN_FUNC_SELECT(PERIPHS_IO_MUX_MTMS_U,FUNC_GPIO14);//
??? //蜂鳴器是低電平觸發(fā),
??? //這里輸出高電平關(guān)閉
??? gpio_output_set(BIT14,0,BIT14,0);
}
(5)網(wǎng)頁(yè)設(shè)計(jì)的布局(截圖)及html代碼。
?
??
<button class="button" onclick="send(2)">開(kāi)蜂鳴器</button>
? <button class="button" onclick="send(3)">關(guān)蜂鳴器</button><BR>
? <button class="button" onclick="send(4)">開(kāi)繼電器</button>
? <button class="button" onclick="send(5)">關(guān)繼電器</button><BR>
四、項(xiàng)目總結(jié)。
(1)設(shè)計(jì)過(guò)程及問(wèn)題解決
(2)采用技術(shù)
(3)項(xiàng)目意義
ESP8266原理圖包含:
1、電源轉(zhuǎn)換電路:對(duì)從USB接口輸入的電流進(jìn)行穩(wěn)壓穩(wěn)流處理
2、USB轉(zhuǎn)TTL電路:帶電阻負(fù)載的BJT反相器,其動(dòng)態(tài)性能不理想。在保持邏輯功能不變的前提下,可以另外增加若干元器以改善其動(dòng)態(tài)性能,如減少由于BJT基區(qū)電荷存儲(chǔ)效應(yīng)和負(fù)載電容所引起的時(shí)延。
3、USB接口電路:傳輸電流以及信息
4、序號(hào)1~18組成9組的跳線帽:各個(gè)接口直接的連接與斷開(kāi)
5、ESP8266模塊接口:主要模塊,匹配串口實(shí)現(xiàn)數(shù)據(jù)傳輸
6、蜂鳴器:GPIO14引腳,低電平觸發(fā)
7、光敏電路:光敏電路,實(shí)現(xiàn)感光效果
8、溫濕度(DHT11)電路:測(cè)量溫濕度
9、彩燈電路:R、G、B三色彩燈模塊
10、按鍵和電路指示燈:系統(tǒng)重啟按鍵,LED燈指示
11、繼電器電路:電路控制模塊,控制高低電壓的流通
ESP8266 可以控制蜂鳴器,繼電器,一個(gè)LED燈的顏色,蜂鳴器,光敏電路,DHT11,按鍵控制等,支持IIC總線,支持UART,可支持一個(gè)數(shù)字輸入/輸出口,不能直接接入模擬輸入/輸出設(shè)置,通過(guò)WIFI連接其他設(shè)備進(jìn)行通信,可以采用AP模式,STA+AP模式工作。包括:電源轉(zhuǎn)換電路:ESP8266IO口、外部傳感器電源接口、外部彩燈接口,ESP8266模塊接口,USB轉(zhuǎn)TTL電路及USB接口電路,蜂鳴器及光敏電路,溫濕度(DHT11)電路,彩燈電路,按鍵和電路指示燈,繼電器電路。ESP8266支持3種工作模式”STA”、“AP”、“STA+AP”模式。STA模式:該模塊通過(guò)路由器連接網(wǎng)絡(luò),手機(jī)或者電腦實(shí)現(xiàn)該設(shè)備的遠(yuǎn)程控制。AP模式:該模塊作為熱點(diǎn),手機(jī)或者電腦連接wifi與該模塊通信,實(shí)現(xiàn)局域網(wǎng)的無(wú)線控制。STA+AP模式:兩種模式共存,既可以通過(guò)路由器連接到互聯(lián)網(wǎng),也可以作為WiFi熱點(diǎn),使其他設(shè)備連接到這個(gè)模塊,實(shí)現(xiàn)廣域網(wǎng)與局域網(wǎng)的無(wú)縫切換。
ESP8266支持3種工作模式”STA”、“AP”、“STA+AP”模式。STA模式:該模塊通過(guò)路由器連接網(wǎng)絡(luò),手機(jī)或者電腦實(shí)現(xiàn)該設(shè)備的遠(yuǎn)程控制。AP模式:該模塊作為熱點(diǎn),手機(jī)或者電腦連接wifi與該模塊通信,實(shí)現(xiàn)局域網(wǎng)的無(wú)線控制。STA+AP模式:兩種模式共存,既可以通過(guò)路由器連接到互聯(lián)網(wǎng),也可以作為WiFi熱點(diǎn),使其他設(shè)備連接到這個(gè)模塊,實(shí)現(xiàn)廣域網(wǎng)與局域網(wǎng)的無(wú)縫切換。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-421050.html
網(wǎng)頁(yè)設(shè)計(jì)設(shè)置標(biāo)簽放置了幾個(gè)文本框,幾個(gè)按鈕,使用異步刷新來(lái)同步LED燈的狀態(tài),繼電器,蜂鳴器的實(shí)時(shí)控制,DHT11和光敏電阻數(shù)據(jù)的實(shí)時(shí)追蹤。本實(shí)驗(yàn)可以應(yīng)用于室內(nèi)環(huán)境的監(jiān)測(cè),進(jìn)而做出適當(dāng)?shù)恼{(diào)整。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-421050.html
到了這里,關(guān)于物聯(lián)網(wǎng)智能網(wǎng)關(guān)(ESP8266WIFI模塊)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!