設備與材料
個人電腦 × 1
ESP12F × 1
麵包板 × 1
SW按鈕 × 1
MAX31855模組 × 1
K-Type 熱電偶 × 1
連接線 若干
實體接線圖
開發環境
使用 Arduino IDE 安裝 ESP8266開發板,如果不知道如何安裝ESP8266開發板,可以參考 “準備你的 ESP12E/F 開發工具” ,安裝開發板之後,記得開發板選擇 “NodeMCU 1.0(ESP-12E Module)” ,之後安裝MAX31855 程式庫,如下圖步骤。
設定 ThingSpeak
先登入你的 ThingSpeak 帳號,如果沒有帳號可以參考 ThingSpeak 雲端資料庫 帳號申請 。登入按 “New Channel”,新增你的新頻道(用來接收統計 ESP-12F 發佈的資料)。
輸入 Name、 Field1、 Field2欄位名稱(可支援中文),並勾選。滑鼠往下滾動後,按“Save Channel”
新增的 “溫度監控” 資料收集頻道(Channel),Channel ID 很重要,使用 MQTT 發佈資料到雲端資料庫會使用到
設定 “溫度監控” 頻道(Channel) MQTT Device,這樣才可以用 MQTT 發佈資料到 ThingSpeak
新增 MQTT Devices
設定 Name ,並把剛剛新增的頻道(Channel)加進來
加入頻道(Channel) 後,按 “Add Device” 新增 MQTT Device
新增後,會給你 MQTT 連線的一些資料,按 “Download Credertials” 下載回來
選擇 下載 “Arduino (mqtt_secrets.h)”
我是開啟檔案後,直接複製到 Arduino IDE 的程式裡。
以上完成,ThingSpeak 的設定,接著完成硬體,硬體完成後,程式燒好,就可以測試功能正不正確。需要修改圖形顯示的 “Results” 從60筆資料變成900,每秒1筆,可以統計15分鐘。按圖形右上 “筆形 ICON“,可以進入設定畫面。
使用電烙鐵直接加熱 K-Type 熱電偶測試溫度,SW接腳必需接地才會送資料到雲端喔!
範例程式
/*
* ESP-12F 雲端記錄型 K-Type 溫度計(MQTT ThingSpeak)
* 開發工具 Arduino IDE 必需自行加入ESP12F 開發板
* 需要安裝 MQTT 程式庫(PubSubClient)
* 需要安裝 MAX31855 程式庫
* 開發板 ESP12F(ESP8266)
* 此程式為範例程式,SW開關接地時,每秒發佈環境溫度與熱電偶溫度到 ThingSpeak
* 使用通訊協定 MQTT ,MQTT broker 使用 mqtt3.thingspeak.com
* mqtt3.thingspeak.com 需要先註冊與設定
* https://www.block.tw/blog
*/
//Wifi
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WiFiMulti.h>
//MQTT LIB 需要自行安裝程式庫 https://github.com/knolleary/pubsubclient
#include <PubSubClient.h>
ESP8266WiFiMulti wifiMulti;
WiFiClient espClient;
PubSubClient client(espClient);
//MAX31855 需要的程式庫
#include <MAX31855.h>
//MAX31855 接腳
#define MAXDO D3 // D3 GPIO 0
#define MAXCS D2 // D2 GPIO 4
#define MAXCLK D5 // D5 GPIO 14
#define SW D6 //開關接腳
// 宣告 MAX31855 物件
MAX31855_Class MAX31855;
//WIFI SSID 跟密碼
#define APSSID "********" //你的 SSID
#define APPW "********" //你的 wifi 網路密碼
// MQTT ThingSpeak MQTT 伺服器 需要換成你的喔!
#define SECRET_MQTT_USERNAME "DwkYEBMeAT0FAAQtBjsjMgE"
#define SECRET_MQTT_CLIENT_ID "DwkYEBMeAT0FAAQtBjsjMgE"
#define SECRET_MQTT_PASSWORD "*******ivWa3nudmOt/KXBA"
const char* brokerUser = SECRET_MQTT_USERNAME; //使用者名稱
const char* brokerPass = SECRET_MQTT_PASSWORD; //使用者密碼
const char* broker = "mqtt3.thingspeak.com";
//channels/Channel ID/publish 記得換成你的 Channel ID
const char* pubTopic = "channels/1717654/publish";
//發佈 MQTT 所需要的字串
char msg[40] ;
String msgStr = "";
//計算時間用的變數
long currentTime, lastTime;
void setup(){
pinMode(LED_BUILTIN, OUTPUT);
pinMode(SW, INPUT_PULLUP);
//內建板上 LED 滅 D4 GPIO 2
digitalWrite(LED_BUILTIN, HIGH);
Serial.begin(115200);
setupWiFi();
client.setServer(broker, 1883);
client.setCallback(callback);
//MAX31855 啟用
while (!MAX31855.begin(MAXCS,MAXDO,MAXCLK)){
Serial.println(F("Unable to start MAX31855. Waiting 3 seconds."));
delay(3000);
} // of loop until device is located
}
void loop(){
if (!client.connected()){
//連接 MQTT 伺服器
MQTTconnect();
}
//client.loop();
currentTime = millis();
//1秒發一次訊息
if(currentTime - lastTime > 1000){
//讀取環境溫度與熱電偶溫度
float aT=(float)MAX31855.readAmbient()/1000;
float pT=(float)MAX31855.readProbe()/1000;
//如果SW接腳低電位就發送
if(!digitalRead(SW)){
Serial.print("Sending messages:\t");
//把溫度變成傳送 ThingSpeak MQTT 字串指令
msgStr="field1="+(String)aT+"&field2="+(String)pT;
//字串轉字元
msgStr.toCharArray(msg,msgStr.length()+1);
Serial.println(msg);
client.publish(pubTopic,msg);
}
lastTime = millis();
}
}
//訂閱的主題有人發佈訊息時的處理函式
void callback(char* topic, byte* payload, unsigned int len){
//無
}
//連接無線 wifi 的處理函式
void setupWiFi(){
delay(100);
//連接無線 wifi
wifiMulti.addAP(APSSID, APPW);
Serial.println("Wifi Connecting ...");
//內建板上 LED 亮
digitalWrite(LED_BUILTIN, LOW);
while (wifiMulti.run() != WL_CONNECTED){
delay(250);
Serial.print('.');
}
//內建板上 LED 滅
digitalWrite(LED_BUILTIN, HIGH);
Serial.println('\n');
Serial.print("Connected to:\t");
Serial.println(WiFi.SSID());
Serial.print("IP address:\t");
Serial.println(WiFi.localIP());
}
void MQTTconnect(){
while (!client.connected()){
//連接 MQTT 伺服器,mqtt3.thingspeak.com 要註冊 不可亂填
if (client.connect(SECRET_MQTT_CLIENT_ID, brokerUser, brokerPass)) {
Serial.print("\nConnected to ");
Serial.println(broker);
} else {
Serial.println("Connecting");
delay(2500);
}
}
}
Arduino 輸出實習(單燈閃爍)
Arduino 輸出實習(跑馬燈-愚公移山)
Arduino 輸出實習(跑馬燈-for迴圈)
Arduino 數位輸入實習
Arduino 數位輸入實習(INPUT_PULLUP)
Arduino 類比輸入實習
Arduino PWM 實習 (呼吸燈)
Arduino PWM 實習 (光感應調光燈)
Arduino 8×8 LED Matrix MAX7219 實習
Arduino 紅綠燈小綠人 實習
Arduino 計時器 實習
Arduino 音樂盒
Arduino 電子琴(鍵盤掃描)
Arduino DHT11 溫濕度感應器
Arduino OLED 顯示
Arduino 超音波測距模組 HC-SR04
Arduino 執行時間實習
Arduino 電容測試器
Arduino 紅外線接收實習
Arduino 紅外線發射實習 EPSON 投影機控制
ESP-12F 網路智慧開關(MQTT)
ESP-12F 雲端記錄型 K-Type 溫度計(MQTT ThingSpeak)
ESP-12F 手機雲端紅外線控制
ESP-12F 網路電台收音機
ESP-12F 電子鼓