設備與材料
個人電腦 × 1
ESP12F × 1
麵包板 × 1
SW按鈕 × 1
MAX31855模組 × 1
K-Type 熱電偶 × 1
連接線 若干
實體接線圖
開發環境
使用 Arduino IDE 安裝 ESP8266開發板,如果不知道如何安裝ESP8266開發板,可以參考 “準備你的 ESP12E/F 開發工具” ,安裝開發板之後,記得開發板選擇 “NodeMCU 1.0(ESP-12E Module)” ,之後安裝MAX31855 程式庫,如下圖步骤。
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FPowerPlug/pubsubclient1.jpg)
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/max31855lib.jpg)
設定 ThingSpeak
先登入你的 ThingSpeak 帳號,如果沒有帳號可以參考 ThingSpeak 雲端資料庫 帳號申請 。登入按 “New Channel”,新增你的新頻道(用來接收統計 ESP-12F 發佈的資料)。
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak1.jpg)
輸入 Name、 Field1、 Field2欄位名稱(可支援中文),並勾選。滑鼠往下滾動後,按“Save Channel”
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak2.jpg)
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak3.jpg)
新增的 “溫度監控” 資料收集頻道(Channel),Channel ID 很重要,使用 MQTT 發佈資料到雲端資料庫會使用到
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak4.jpg)
設定 “溫度監控” 頻道(Channel) MQTT Device,這樣才可以用 MQTT 發佈資料到 ThingSpeak
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak5.jpg)
新增 MQTT Devices
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak6.jpg)
設定 Name ,並把剛剛新增的頻道(Channel)加進來
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak7.jpg)
加入頻道(Channel) 後,按 “Add Device” 新增 MQTT Device
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak8.jpg)
新增後,會給你 MQTT 連線的一些資料,按 “Download Credertials” 下載回來
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak9.jpg)
選擇 下載 “Arduino (mqtt_secrets.h)”
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak10.jpg)
我是開啟檔案後,直接複製到 Arduino IDE 的程式裡。
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak11.jpg)
以上完成,ThingSpeak 的設定,接著完成硬體,硬體完成後,程式燒好,就可以測試功能正不正確。需要修改圖形顯示的 “Results” 從60筆資料變成900,每秒1筆,可以統計15分鐘。按圖形右上 “筆形 ICON“,可以進入設定畫面。
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak12.jpg)
使用電烙鐵直接加熱 K-Type 熱電偶測試溫度,SW接腳必需接地才會送資料到雲端喔!
![](https://www.block.tw/blog/wp-content/uploads/arduino/ESP12FMAX31855/ThingSpeak13.jpg)
範例程式
/*
* 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 電子鼓