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

當前位置:首頁 > 公眾號精選 > 嵌入式IoT

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

1. 文章說明

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

2. 硬件電路

2.1 外觀介紹

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

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

2.2 引腳分布

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

3. 軟件設計

3.1 閃燈

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

目的

讓開發(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進行編譯,然后下載到開發(fā)板就可以看到程序正常啟動了。當然,這都是非常簡單的操作。

3.2 按鍵

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

掃描方式

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

#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);
}

中斷方式

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

#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,也就是脈沖寬度調制。本來數(shù)字電路就是輸出高低電平來維持設備的正常工作,PWM就可以輸出斷斷續(xù)續(xù)的電平,從而通過占空比來調節(jié)輸出電壓。典型的應用就是控制液晶顯示屏的背光燈的亮度?;蛘呖刂齐姍C的轉速和角度。下面我們通過一個示例來講解PWM的調節(jié)。

目標:呼吸燈

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

#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占空比,從而間接調節(jié)兩端的電壓。進一步讓其輸出明暗的效果。

3.4 SoftAP

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

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

#include  #include  //自定義AP的SSID與密碼 const char *ssid = "BA_AP"; const char *password = "bigmagic"; //申明端口 ESP8266WebServer server(80); //設定 web 服務的成功響應信息 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); //調用 on 方法,給客戶端發(fā)送響應信息,啟動 web 服務,并在串口回顯 server.on("/", handleRoot); server.begin(); Serial.println("HTTP server started"); } //循環(huán)等待處理客戶端的連接 void loop() { delay(100); Serial.print("."); server.handleClient(); }

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

3.5 STA模式

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

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

首先AP在不斷的向周圍發(fā)出信號,也就是信標幀(beacon)。STA如果開啟WiFi也會每隔一定的事件發(fā)送探測幀(probe)。這樣其實有一個問題,就是會有不良的使用者制作WIFI探針。今年的315上報道了WIFI探針的問題。也就是自帶WIFI功能的手機,即使在不連接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() {

}

串口打印信息如下

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

3.6 AP+STA

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

3.7 Scan WiFi

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

#include "ESP8266WiFi.h"  void setup() { 
 Serial.begin(115200); //設定 WiFi 為 STA 模式,如果先前已連接上 AP,則與之斷開 WiFi.mode(WIFI_STA); 
 WiFi.disconnect(); 
 delay(100); 
 Serial.println("Setup done"); 
} void loop() { 
 Serial.println("scan start"); // WiFi.scanNetworks 可以返回掃描到的無線網(wǎng)絡數(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)絡的 SSID 和所接收的信號強度 RSSI */ Serial.print(i + 1); 
 Serial.print(": "); 
 Serial.print(WiFi.SSID(i)); 
 Serial.print(" ("); 
 Serial.print(WiFi.RSSI(i)); 
 Serial.print(")"); //判斷 WiFi 網(wǎng)絡是否加密,并輸出結果  Serial.println((WiFi.encryptionType(i) == ENC_TYPE_NONE)?" ":"*"); 
 delay(10); 
 } 
 } 
 Serial.println(""); //連續(xù)掃描的時間間隔 delay(3000); 
} 

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

表示列出附件的WiFi的相關信息。

4. 總結

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


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