作者:曹建國
物聯網興起之後,聯發科技創意實驗室(MediaTek Labs)專注於物聯網中四個關鍵的技術領域:穿戴式裝置、智慧家居、智慧定位和 M2M。而且聯發科技透過不斷的創新各種系統級晶片(SoCs),以提升處理能力,能應付物聯網中更複雜的情境。尤其在智慧居家技術中,提供安全、省電、客製化及便利等不同的開發晶片,來解決多面向的議題,更提供了安全的 Wi-Fi 通訊能力,並建立安全機制來與網際網路和各種周邊連線的雲端平台串聯。
上一代Linkit Smart 7688/DUO兼具服務端與用戶端的強大功能及易上手的開發環境,目前已是Maker接受度極高的一款開發板。然而,許多Maker在建立物聯網裝置時,更需要體積小、速度快、功能不差的純用戶端開發板,於是,MediaTek Labs再次推出 Linkit 7697 這款開發板,讓Maker能更快開發出符合前述需求的物聯網裝置。
在智慧家居的物聯網技術中,家庭溫度監控往往是最基礎,也是最關鍵的核心技術,因為以人為中心思想的智慧家居,致力於創造舒適的環境,而舒適與否往往取決於溫度的感受,因此本文要運用Linkit 7697 開發板的Wi-Fi 網路功能來建立網際網路的溫溼度監控網站,讓家庭中所有成員,都可以透過網際網路來獲得快速、正確的溫溼度資訊。
讓Linkit 7697 開發板連上網際網路
所以第一步,我們就是要教大家如何取得MAC資料。首先將Linkit 7697 開發板驅動程式安裝好之後(可參考【Tutorial】LinkIt 7697三種開發環境,輕鬆上手!),我們要打開Linkit 7697 開發板的開發工具:Arduino IDE整合開發軟體,並撰寫一段程式(如下表所示),如此就能透過LinkIt 7697 開發板模組,取得MAC資料。
(程式碼可按此下載)
取得MAC資料測試程式 (CheckMac):
#include
#include
IPAddress Meip ,Megateway ,Mesubnet ;
String MacAddress ;
byte mac[6];
int status = WL_IDLE_STATUS; // the Wifi radio’s status
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
MacAddress = GetWifiMac() ;
ShowMac() ;
}
void loop() {
}
void ShowMac()
{
Serial.print(“MAC:”);
Serial.print(MacAddress);
Serial.print(“\n”);
}
String GetWifiMac()
{
String tt ;
String t1,t2,t3,t4,t5,t6 ;
WiFi.status(); //this method must be used for get MAC
WiFi.macAddress(mac);
Serial.print(“Mac:”);
Serial.print(mac[0],HEX) ;
Serial.print(“/”);
Serial.print(mac[1],HEX) ;
Serial.print(“/”);
Serial.print(mac[2],HEX) ;
Serial.print(“/”);
Serial.print(mac[3],HEX) ;
Serial.print(“/”);
Serial.print(mac[4],HEX) ;
Serial.print(“/”);
Serial.print(mac[5],HEX) ;
Serial.print(“~”);
t1 = print2HEX((int)mac[0]);
t2 = print2HEX((int)mac[1]);
t3 = print2HEX((int)mac[2]);
t4 = print2HEX((int)mac[3]);
t5 = print2HEX((int)mac[4]);
t6 = print2HEX((int)mac[5]);
tt = (t1+t2+t3+t4+t5+t6) ;
Serial.print(tt);
Serial.print(“\n”);
return tt ;
}
String print2HEX(int number) {
String ttt ;
if (number >= 0 && number < 16)
{
ttt = String(“0”) + String(number,HEX);
}
else
{
ttt = String(number,HEX);
}
return ttt ;
}
如下圖所示,讀者可以看到本次實驗——取得MAC資料測試程式的結果畫面。
透過WiFi模組登連接無線基地台
整合上述程式,我們可以輕易取得MAC資料,下一步我們就要教導讀者如何連到無線基地台(Access Point)。一樣打開Arduino IDE整合開發軟體,撰寫連接無線基地台的測試程式(如下表所示),我們就可以透過LinkIt 7697 開發板,連到無線基地台(Access Point)。
(程式碼可按此下載。)
連接無線基地台測試程式 (ConnectWithWPA)
#include <String.h>
IPAddress Meip ,Megateway ,Mesubnet ;
String MacAddress ;
byte mac[6];
int status = WL_IDLE_STATUS; // the Wifi radio’s status
char ssid[] = “IOT”; // your network SSID (name)
char pass[] = “iot12345”; // your network password
void setup() {
//Initialize serial and wait for port to open:
Serial.begin(9600);
MacAddress = GetWifiMac() ; // get MacAddress
ShowMac() ; //Show Mac Address
initializeWiFi(); // connect Wifi Access Point
ShowInternetStatus(); // Show Internet information from Wifi Setup
}
void loop() {
}
void initializeWiFi() {
while (status != WL_CONNECTED) {
Serial.print(“Attempting to connect to SSID: “);
Serial.println(ssid);
// Connect to WPA/WPA2 network. Change this line if using open or WEP network:
status = WiFi.begin(ssid, pass);
// status = WiFi.begin(ssid);
// wait 10 seconds for connection:
delay(2000);
}
Serial.print(“\n Success to connect AP:”) ;
Serial.print(ssid) ;
Serial.print(“\n”) ;
}
void printWifiData() {
// print your WiFi shield’s IP address:
IPAddress ip = WiFi.localIP();
Serial.print(“IP Address: “);
Serial.println(ip);
Serial.println(ip);
// print your MAC address:
byte mac[6];
WiFi.macAddress(mac);
Serial.print(“MAC address: “);
Serial.print(mac[5], HEX);
Serial.print(“:”);
Serial.print(mac[4], HEX);
Serial.print(“:”);
Serial.print(mac[3], HEX);
Serial.print(“:”);
Serial.print(mac[2], HEX);
Serial.print(“:”);
Serial.print(mac[1], HEX);
Serial.print(“:”);
Serial.println(mac[0], HEX);
}
void printCurrentNet() {
// print the SSID of the network you’re attached to:
Serial.print(“SSID: “);
Serial.println(WiFi.SSID());
// print the MAC address of the router you’re attached to:
byte bssid[6];
WiFi.BSSID(bssid);
Serial.print(“BSSID: “);
Serial.print(bssid[5], HEX);
Serial.print(“:”);
Serial.print(bssid[4], HEX);
Serial.print(“:”);
Serial.print(bssid[3], HEX);
Serial.print(“:”);
Serial.print(bssid[2], HEX);
Serial.print(“:”);
Serial.print(bssid[1], HEX);
Serial.print(“:”);
Serial.println(bssid[0], HEX);
// print the received signal strength:
long rssi = WiFi.RSSI();
Serial.print(“signal strength (RSSI):”);
Serial.println(rssi);
// print the encryption type:
byte encryption = WiFi.encryptionType();
Serial.print(“Encryption Type:”);
Serial.println(encryption, HEX);
Serial.println();
}
void ShowMac()
{
Serial.print(“MAC:”);
Serial.print(MacAddress);
Serial.print(“\n”);
}
String GetWifiMac()
{
String tt ;
String t1,t2,t3,t4,t5,t6 ;
WiFi.status(); //this method must be used for get MAC
WiFi.macAddress(mac);
Serial.print(“Mac:”);
Serial.print(mac[0],HEX) ;
Serial.print(“/”);
Serial.print(mac[1],HEX) ;
Serial.print(“/”);
Serial.print(mac[2],HEX) ;
Serial.print(“/”);
Serial.print(mac[3],HEX) ;
Serial.print(“/”);
Serial.print(mac[4],HEX) ;
Serial.print(“/”);
Serial.print(mac[5],HEX) ;
Serial.print(“~”);
t1 = print2HEX((int)mac[0]);
t2 = print2HEX((int)mac[1]);
t3 = print2HEX((int)mac[2]);
t4 = print2HEX((int)mac[3]);
t5 = print2HEX((int)mac[4]);
t6 = print2HEX((int)mac[5]);
tt = (t1+t2+t3+t4+t5+t6) ;
Serial.print(tt);
Serial.print(“\n”);
return tt ;
}
void ShowInternetStatus()
{
if (WiFi.status())
{
Meip = WiFi.localIP();
Serial.print(“Get IP is:”);
Serial.print(Meip);
Serial.print(“\n”);
}
else
{
Serial.print(“DisConnected:”);
Serial.print(“\n”);
}
}
// MISC Function
String print2HEX(int number) {
String ttt ;
if (number >= 0 && number < 16)
{
ttt = String(“0”) + String(number,HEX);
}
else
{
ttt = String(number,HEX);
}
return ttt ;
}
如下圖所示,讀者可以看到本次實驗 — 連接無線基地台測試程式結果畫面,可以成功連上無線基地台(Access Point),並透過DHCP伺服器取得網路位址,並能顯示閘道器、網路遮罩等資訊。
連接無線基地台測試程式結果畫面
溫溼度模組電路組立
如下圖所示,這個專案我們需要用到的實驗硬體有下圖(左)LinkIt 7697 開發板、下圖(中) MicroUSB 下載線、下圖(右) 麥克風模組:
由於Linkit 7697 開發板使用ARM Cortex-M4 MCU微處理機,為了可以跟Arduino IDE開發環境相容,筆者參考了原廠的LinkIt 7697 開發板官網,如下圖所示,我們了解到P0~P13對應到Arduino開發板的數位接腳: D0~D13,所以我們就可以將要接的DHT22溫濕度模組,其資料輸出腳位接到P8(D8),完成電路。

溫溼度監控實驗材料表 (來源/MediaTek Labs)
讀者可以參考下圖所示之溫溼度電路圖和接腳表,進行電路配接。
對於溫溼度模組讀取,請者參閱筆者文章《Arduino程式教學(溫溼度模組篇) : Arduino Programming (Temperature& Humidity Modules)》(曹永忠, 許智誠, & 蔡英德, 2016a, 2016b, 2016c, 2016d),有詳細說明如何讀取溫溼度模組的方法與參考程式,這裡就不再詳述。
安裝溫溼度模組函式庫
由於DHT22溫濕度模組之常見到的函式庫,是無法應用到LinkIt 7697 開發板的,所以筆者參考原廠官網的LinkIt 7697 Starter Kit,下載「Temperature and Humidity Sensor Pro」的相關函式庫,可按此下載。至於安裝函式庫的方法,可以參考筆者文章《智慧家庭:如何安裝各類感測器的函式庫》(曹永忠, 2016b; 曹永忠 et al., 2016a, 2016c),完成DHT22溫濕度模組的函式庫安裝。
溫濕度模組基本測試
我們打開Arduino IDE整合開發軟體,如下圖所示,開啟Temperature and Humidity Sensor Pro的函式範例。
如下表所示之dht22測試範例程式,我們先修改:#define DHTPIN D8,將資料輸出腳位接到P8(D8),再將#define DHTTYPE DHT22,設定為本文使用的DHT22溫濕度模組,請將DHT11/DHT21的程式標示註解,我們先行測試DHTtester程式,就能正確讀取DHT22溫濕度模組。
(程式碼可按此下載。)
dht22測試範例程式 (DHTtester)
// Written by ladyada, public domain
#include “DHT.h”
#define DHTPIN 8 // what pin we’re connected to
// Uncomment whatever type you’re using!
//#define DHTTYPE DHT11 // DHT 11
#define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
// Connect pin 1 (on the left) of the sensor to +5V
// Connect pin 2 of the sensor to whatever your DHTPIN is
// Connect pin 4 (on the right) of the sensor to GROUND
// Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor
DHT dht(DHTPIN, DHTTYPE);
void setup()
{
Serial.begin(9600);
Serial.println(“DHTxx test!”);
dht.begin();
}
void loop()
{
// Reading temperature or humidity takes about 250 milliseconds!
// Sensor readings may also be up to 2 seconds ‘old’ (its a very slow sensor)
float h = dht.readHumidity();
float t = dht.readTemperature();
// check if returns are valid, if they are NaN (not a number) then something went wrong!
if (isnan(t) || isnan(h))
{
Serial.println(“Failed to read from DHT”);
}
else
{
Serial.print(“Humidity: “);
Serial.print(h);
Serial.print(” %\t”);
Serial.print(“Temperature: “);
Serial.print(t);
Serial.println(” *C”);
}
}
如下圖所示,讀者可以看到本次實驗-dht22測試範例程式結果畫面,可以成功讀取溫溼度模組的溫溼度資訊。
小結
本篇是《如何使用LinkIt 7697建立智慧溫度監控平台》上篇,主要告訴讀者,在物聯網開發之中,如何使用Linkit 7697開發板來建立物聯網溫溼度感測裝置。
在下篇之中,我們將揭露如何使用這樣的開發裝置,建立一個網際網路的溫溼度監控網站,讓家庭中所有成員都可以透過網際網路來獲得快速、正確的溫溼度資訊。後續還會繼續各種物聯網裝置開發與平台的教學文章,希望與大家一起創造出更優質、更具未來性的物聯網產品開發相關技術。
(責任編輯:賴芳如)
◎加入我們的Line,獲得更多及時文章更新&活動資訊→
- 【大氣監控站台開發案例(下)】環境監控即時監控看板 - 2021/11/25
- 【大氣監控站台開發案例(中)】環境監控雲端平台系統介紹 - 2021/11/02
- 【大氣監控站台開發案例(上)】 大氣監控站建置實例介紹 - 2021/10/18
訂閱MakerPRO知識充電報
與40000位開發者一同掌握科技創新的技術資訊!
2018/03/26
請問LWiFi.h 是放在哪個資料夾,或者要去哪下載?
2018/04/16
您好,我們是MakerPRO編輯部,感謝您的提問,這是技術問題的部分,我們再請作者來回答噢:)