www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式IoT

1. 文章說明2. 硬件電路2.1 外觀介紹2.2 引腳分布3. 軟件設(shè)計3.1 閃燈3.2 按鍵3.3 PWM3.4 SoftAP3.5 STA模式3.6 AP+STA3.7 Scan WiFi4. 總結(jié)

1. 文章說明

本文主要結(jié)合上面的工程環(huán)境,利用vscode+platformIO物聯(lián)網(wǎng)開發(fā)環(huán)境,同時使用當(dāng)下最流行的開源硬件系統(tǒng)Arduino學(xué)習(xí)與掌握對硬件的編程方法。對于物聯(lián)網(wǎng)的江湖世界,Arduino猶如掀起一股浪潮的屠龍寶刀,將繼續(xù)為這風(fēng)起云涌的物聯(lián)網(wǎng)時間貢獻(xiàn)力量。文章就是就是采用Arduino。Talk is cheap!

2. 硬件電路

2.1 外觀介紹

對于硬件的使用,采用的是NODEMCU。如下圖所示

基本上就是這個樣子。一句話概括。NodeMCU,是一個開源的物聯(lián)網(wǎng)平臺。淘寶上14元左右即可拿下。

2.2 引腳分布

NodeMCU引腳分布如下圖所示。其中用戶按鍵FLASH 為GPIO16,LED為GPIO16。

3. 軟件設(shè)計

3.1 閃燈

對于最開始的設(shè)計,先演示一下閃燈操作。閃燈也是最直觀看到程序效果的方法,猶如機(jī)器的心跳,能夠用眼睛看到程序的運行。這也就是最基本的入門程序。

目的

讓開發(fā)板上的燈閃爍起來!

程序如下

#define PIN_LED 16 //定義LED void setup() {
 pinMode(PIN_LED,OUTPUT);
} void loop() {
 digitalWrite(PIN_LED,LOW); //低電平點亮 delay(500);
 digitalWrite(PIN_LED,HIGH);
 delay(500);
}

非常的簡單,將程序放入VSCode進(jìn)行編譯,然后下載到開發(fā)板就可以看到程序正常啟動了。當(dāng)然,這都是非常簡單的操作。

3.2 按鍵

按鍵作為外部輸入設(shè)備,可以作為外界的感應(yīng)給設(shè)備。那么究竟如何使用這個按鍵呢?下面通過按鍵來進(jìn)行點燈操作。

掃描方式

掃描就是每隔一定時間去查看一下按鍵的狀態(tài),如果按鍵達(dá)到了需求的狀態(tài)則進(jìn)行相關(guān)的操作。

#define PIN_LED 16 //定義LED #define KEY_FLASH  0 //定義按鍵 void setup() {
 Serial.begin(115200);
 Serial.setDebugOutput(true);
 pinMode(PIN_LED,OUTPUT);
 pinMode(KEY_FLASH,INPUT);
} void keyScan() { int k = 0;
 k = digitalRead(KEY_FLASH);
 Serial.println("keyScan:");
 Serial.write(k);
 Serial.println(); if(k == 0)
 {
 digitalWrite(PIN_LED,HIGH);
 } else {
 digitalWrite(PIN_LED,LOW);
 }
} void loop() {
 keyScan();
 delay(500);
}

中斷方式

中斷就相當(dāng)于鬧鐘,平時它什么事情也不做,當(dāng)按鍵事件到來時,就觸發(fā)了相應(yīng)的操作。

#include "Arduino.h" #define PIN_LED 16 //定義LED #define KEY_FLASH  0 //定義按鍵 volatile int state = HIGH; void stateChange(); void setup() {
 Serial.begin(74880);
 Serial.setDebugOutput(true);
 pinMode(PIN_LED,OUTPUT);
 pinMode(KEY_FLASH,INPUT);
 attachInterrupt(KEY_FLASH,stateChange,RISING);//下降沿中斷 digitalWrite(PIN_LED,HIGH);//低電平點亮 } void stateChange() {
 state = !state;
 Serial.printf("state:%d\n",state);
 digitalWrite(PIN_LED,state);
} void loop() {

}

3.3 PWM

先講一下什么是PWM,也就是脈沖寬度調(diào)制。本來數(shù)字電路就是輸出高低電平來維持設(shè)備的正常工作,PWM就可以輸出斷斷續(xù)續(xù)的電平,從而通過占空比來調(diào)節(jié)輸出電壓。典型的應(yīng)用就是控制液晶顯示屏的背光燈的亮度。或者控制電機(jī)的轉(zhuǎn)速和角度。下面我們通過一個示例來講解PWM的調(diào)節(jié)。

目標(biāo):呼吸燈

呼吸燈就是按照特定的頻率明暗變化的閃燈方式,猶如人體肺部吸入和呼出空氣一樣慢慢的變化。

#define PIN_LED 16 void setup() {
 pinMode(PIN_LED,OUTPUT);
 analogWrite(PIN_LED,0);//信號模擬輸出 } void loop() { for(int i = 0; i < 1024; i++)
 {
 analogWrite(PIN_LED,i);
 delay(2);
 } for(int i = 1024; i >= 0; i--)
 {
 analogWrite(PIN_LED,i);
 delay(2);
 }
}

程序如上所述,通過控制輸出到LED上的PWM占空比,從而間接調(diào)節(jié)兩端的電壓。進(jìn)一步讓其輸出明暗的效果。

3.4 SoftAP

既然是聯(lián)網(wǎng)模塊,那么就一定要涉及到網(wǎng)絡(luò)部分才叫wifi模塊。8266的網(wǎng)絡(luò)支持功能是非常的強(qiáng)大的,這個也是該模塊的特點。下面主要講一下AP與STA。先來說說AP。AP就是Access Point 也就是訪問接入點。一般就是網(wǎng)絡(luò)的創(chuàng)建者,對于家庭或者辦公室來說,一個無線路由器就是AP,而其他的外設(shè)就是STA。

從原理上來說,我們接下來的實驗是要實現(xiàn)一個接入點,也就是路由器一樣的功能。

#include  #include  //自定義AP的SSID與密碼 const char *ssid = "BA_AP"; const char *password = "bigmagic"; //申明端口 ESP8266WebServer server(80); //設(shè)定 web 服務(wù)的成功響應(yīng)信息 void handleRoot() {
 Serial.print("\n123...\n");
 server.send(200, "text/html", "
		

You are connected

"
); } void setup() { delay(1000); Serial.begin(74880); Serial.println(); Serial.print("Configuring access point..."); /*如果使用開放式 AP 模式,可以把下面語句的 password 參數(shù)省略 */ WiFi.softAP(ssid, password); //獲取 AP 的 IP 地址,存入變量 myIP IPAddress myIP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(myIP); //調(diào)用 on 方法,給客戶端發(fā)送響應(yīng)信息,啟動 web 服務(wù),并在串口回顯 server.on("/", handleRoot); server.begin(); Serial.println("HTTP server started"); } //循環(huán)等待處理客戶端的連接 void loop() { delay(100); Serial.print("."); server.handleClient(); }

程序執(zhí)行后,我們可以用手機(jī)收到名稱為BA_AP的WIFI信息,同時連接上wifi后瀏覽器訪問192.168.4.1即可看到網(wǎng)頁上顯示You are connected的信息。同時可以在串口控制臺上看到123的輸出。

3.5 STA模式

與AP模式相對應(yīng),STA就是連接到路由器上的設(shè)備。這種模式使用的最多。下圖中路由器是AP,其他的手機(jī),電腦,開發(fā)板都是屬于STA的范疇。

在講今天的程序之前,可以看看設(shè)備是如何聯(lián)網(wǎng)的。

首先AP在不斷的向周圍發(fā)出信號,也就是信標(biāo)幀(beacon)。STA如果開啟WiFi也會每隔一定的事件發(fā)送探測幀(probe)。這樣其實有一個問題,就是會有不良的使用者制作WIFI探針。今年的315上報道了WIFI探針的問題。也就是自帶WIFI功能的手機(jī),即使在不連接WIFI的情況下,只要開啟了WIFI的功能,那么信息就有可能被截獲到。

其整個流程如下:

連接WIFI程序如下

#include  //連接AP賬號 const char* ssid = "ChinaNet-pUas" const char* password = "zhao565658" void setup()
{
 Serial.begin(115200); 
 delay(10); 
 Serial.println(); 
 Serial.println(); 
 Serial.print("Connecting to "); 
 Serial.println(ssid); 
 WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { 
 delay(500); 
 Serial.print("."); 
 } 
 Serial.println(""); 
 Serial.println("WiFi connected"); 
 Serial.println("IP address: "); 
 Serial.println(WiFi.localIP()); 
} void loop() {

}

串口打印信息如下

并且可以在路由器管理中看到設(shè)備,表示連接成功。

3.6 AP+STA

8266可以既作為AP也同時可以作為STA,這就需要內(nèi)部有兩個MAC地址。這種方式就像筆記本電腦既可以聯(lián)網(wǎng),也可以開啟熱點一樣。作為數(shù)據(jù)直接轉(zhuǎn)發(fā)功能。

3.7 Scan WiFi

8266可以掃描附件的WiFi信息,和手機(jī)上掃描熱點一樣。下面來實現(xiàn)一下這個功能

#include "ESP8266WiFi.h"  void setup() { 
 Serial.begin(115200); //設(shè)定 WiFi 為 STA 模式,如果先前已連接上 AP,則與之?dāng)嚅_ WiFi.mode(WIFI_STA); 
 WiFi.disconnect(); 
 delay(100); 
 Serial.println("Setup done"); 
} void loop() { 
 Serial.println("scan start"); // WiFi.scanNetworks 可以返回掃描到的無線網(wǎng)絡(luò)數(shù)目 int n = WiFi.scanNetworks(); 
 Serial.println("scan done"); if (n == 0) 
 Serial.println("no networks found"); else { 
 Serial.print(n); 
 Serial.println(" networks found"); for (int i = 0; i < n; ++i) 
 { /*在串口輸出所發(fā)現(xiàn)的每一個無線網(wǎng)絡(luò)的 SSID 和所接收的信號強(qiáng)度 RSSI */ Serial.print(i + 1); 
 Serial.print(": "); 
 Serial.print(WiFi.SSID(i)); 
 Serial.print(" ("); 
 Serial.print(WiFi.RSSI(i)); 
 Serial.print(")"); //判斷 WiFi 網(wǎng)絡(luò)是否加密,并輸出結(jié)果  Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); 
 delay(10); 
 } 
 } 
 Serial.println(""); //連續(xù)掃描的時間間隔 delay(3000); 
} 

通過串口可以看到串口消息如下

表示列出附件的WiFi的相關(guān)信息。

4. 總結(jié)

本次分享的文章主要是對8266進(jìn)行基本的操作,演示了基本的用法和功能,更加高級的用法后面再做研究。好的東西用起來的效果就是不一樣。前面的實驗對于初學(xué)者來說,可以全面的了解這個模塊的功能,如果是大神可以直接忽略,因為太過簡單。后面再慢慢深入研究該模塊的使用。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉