在目前Raspberry Pi , Arduino及其它大廠 (聯發科LinkIt One / 瑞昱Ameba.....)推出相容開發板容易
取得及價格低廉的情況下 , 要自行架個簡單的IOT環境 , 已不是難事 , 本次小編使用Azure
Mobile Service結合Arduino Uno3 + DHT11來製作一個簡單的網路温度/溼度計 , 做法如以下:
取得及價格低廉的情況下 , 要自行架個簡單的IOT環境 , 已不是難事 , 本次小編使用Azure
Mobile Service結合Arduino Uno3 + DHT11來製作一個簡單的網路温度/溼度計 , 做法如以下:
1.首先到Azure Manage Portal建立Mobile Service
2.填入Server Name及DB管理者帳號及密碼
3.新增一個Table來存放資料
4.在Table Name輸入名字 , 並且設定任何人只要知道Application Key就可以新增/修改/刪除/讀取 資料
5.在Mobile Service中 , 確定Table已建立好 , 並且可正常運作
6. 在Azure Mobile Service點選管理金鑰 , 並記下二組金鑰 , 待會程式會用到
7.確認在Azure Mobile Service下的資料可以看到一個資料表名稱為tabledht11 , Mobile Service準備工作到此結束
8.先準備好Arduino Uno3 , Ethernet Shield , 3條杜邦線及DHT11 (温度/溼度感測器) ,如下圖 :
9.將Arudino Uno 3及Ethernet Shield組合起來 , Ethernet Shield在上面 , 如下圖 :
10~11.接下來必須將 DHT11的三支腳接到Ethernet Shield , 接線電路圖如下 : DHT11的Vcc接Ethernet Shield 5V , DHT11的GND接Ethernet Shield的GND , DHT11的Data接Ethernet Shield D4
12.開啟Arduino IDE , 將以下程式碼貼上 , 只需填入Server Name , Table Name及步驟6的key即可
#include <SPI.h>
#include <Ethernet.h>
#include <dht11.h>
// Ethernet shield MAC address (sticker in the back)
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
/*You can find this values in your Mobile Service dashboard
server = namemobileservice.azure-mobile.net
table_name = nametable
ams_key = your keyvalue, find in home page mobile service, with a click on button MANAGE KEYS*/
const
char
* server =
"sensorfarm.azure-mobile.net"
;
const
char
* table_name =
"tabsensor"
;
const
char
* ams_key =
"you can find it on mobile service with manage keys button"
;
EthernetClient client;
char
buffer[64];
dht11 DHT;
#define DHT11_PIN 4
/*This method use Mobile service REST API fot to write value*/
void
write_sensorvalue(
double
tempvalue,
double
humidityvalue)
{
if
(client.connect(server, 80)) {
/*Table name in Mobile service*/
sprintf
(buffer,
"POST /tables/%s HTTP/1.1"
, table_name);
client.println(buffer);
/*Sever name in Mobile Service*/
sprintf
(buffer,
"Host: %s"
, server);
client.println(buffer);
/*Mobile Services application key*/
sprintf
(buffer,
"X-ZUMO-APPLICATION: %s"
, ams_key);
client.println(buffer);
// JSON content type for the information
client.println(
"Content-Type: application/json"
);
/*Write values of temperature and humidity from DHT11 sensor*/
sprintf
(buffer,
"{\"tempvalue\":\"%f\",\"humidityvalue\":\"%f\"}"
, tempvalue, humidityvalue);
// Content length
client.print(
"Content-Length: "
);
client.println(
strlen
(buffer));
// End of headers
client.println();
// Request body
client.println(buffer);
}
else
{
Serial.println(
"no connection available!"
);
}
client.stop();
}
/*-------------------------------------------------------*/
/*Setup method*/
/*-------------------------------------------------------*/
void
setup()
{
Serial.begin(9600);
if
(Ethernet.begin(mac) == 0)
{
Serial.println(
"ethernet shield failed"
);
for
(;;);
}
// Ethernet shield initialization:
delay(1000);
}
/*-------------------------------------------------------*/
/*Loop method*/
/*-------------------------------------------------------*/
void
loop()
{
/*Read value from sensor input*/
int
chk = DHT.read(DHT11_PIN);
/*Call method writ_sensorvalue and pass sensor parameter for to save on mobile service*/
write_sensorvalue((DHT.temperature), (DHT.humidity));
/*Time wait for new input data*/
delay(10000);
}
13.在Arduino IDE執行程式結果如下 :
14. 即可從Azure Mobile Service中的Table中看到温度及溼度被寫入Table
15.使用SQL Server Management Studio開啟資料庫中的Table , 檢視温度及溼度值是否寫入
16.若要移轉到Azure App Service , 執行以下步驟
17.輸入要移轉的Mobile Service名稱
18.移轉到Azure App Service , 可看到Easy Tables , 温度及溼度值會寫到這裡
19.Easy Tables看到的温度及溼度值 , 如下圖 :
資料來源 : http://social.technet.microsoft.com/wiki/contents/articles/31660.arduino-due-and-mobile-service-it-it.aspx
作者已經移除這則留言。
回覆刪除您好,想請問新版的Azure中app service似乎於須再使用金鑰,也沒有金鑰的樣子,那在程式碼的部分,是直接將有金鑰的部分直接刪去即可?或者還要再做修改?謝謝
回覆刪除漏掉你的留言,我在Arudino的Code改成以下例子,供你參考
刪除/*You can find this values in your Mobile Service dashboard
server = namemobileservice.azure-mobile.net
table_name = nametable
ams_key = your keyvalue, find in home page mobile service, with a click on button MANAGE KEYS*/
const char* server = "mvcdht2017.azure-mobile.net";
const char* table_name = "tabledht11";
const char* ams_key = "jOwRdsrmqEbChbadRkAldBNkuwtgwrws";
很感謝您回覆,但是我在Mobile App Service裡建立簡易表後,權限是設為"允許匿名存取",在現行的服務上沒有金鑰可以用?
刪除