ESP8266 玩板記
阿新 • • 發佈:2020-10-08
一、前言
esp8266的玩板記,後面應該會去更一些其他東西,這一塊內容,這算是收官之戰了。
IoT,江湖有緣再相會
二、ESP8266實現WiFi殺手/釣魚
這次的部落格做的是一個娛樂性較強的專案。
本文僅供娛樂學習,不得進行違法專案。
- 準備工作
- 硬體
- NodeMcu esp8266,資料線*1
- 軟體
- flash_download_tools_v3.6.5.exe
- 韌體 DNS.ino.ino.nodemcu.bin (解壓一下,藍奏雲好像不能上傳.bin檔案)
- 寫入韌體
- 環境和配置方式已經在 第一次的IoT部落格 解決過了
- 開啟 flash_download_tools_v3.6.5.exe
- 注意一下紅框內容
第一個選擇剛才的 DNS.ino.ino.nodemcu.bin 檔案
第二個地址輸入 0x00000(這裡可能會出現紅框,導致編譯上傳失敗)
[解決方案:重啟一下DownloadTool,手動輸入地址]
其他對照著面板修改一下就行了
- 寫入後會出現WiFi
WiFi_name: HH
WiFi_password: m1234567
- 咳咳,博主這裡出現了一點小插曲,使本應該四點半完成的工作變到了五點半TuT
- 磚家建議:擦除Flash,但這個東西韌體刷入是在一週前,我現在用的時候,發現刷成功了ovo
- Ardunio 上傳 web端
- web原始碼上傳工具
- 放入根目錄中
- 進入 Ardunio 開發板管理器 esp8266 2.2.0 版本安裝
- 檔案 - 新建 - 清空程式碼 - 儲存 - 工具 - esp8266 sketch data upload - 選擇 no 選項
- 此時會多一個 data 空資料夾,然後複製 data 檔案進去
- 再點選 esp8266 sketch data upload,選擇 no 選項,此時開始上傳檔案,等一兩分鐘結束
- 電腦連線 HH 的 WiFi,瀏覽器輸入 192.168.1.1/backdoor.html 進入 web 頁面,開始除錯(釣魚)
- 這裡再提供一個方法,比較方便,但沒有釣魚功能
- 下載這個資源包:esp8266資源包,並解壓
- config 選擇韌體,把 Wi-PWN.ino.CH.bin 路徑新增進去
- baudrate 選擇板子引數,我的是9600,4M,40Mhz,DIO
- operation - flash,等待許久,韌體刷入
- 重啟,出現 ESP_063FA7 的WiFi
- 瀏覽器輸入 192.168.4.1 訪問,並設定密碼
- 開始“操作”
三、ESP8266接入阿里雲物聯網平臺上傳溫溼度資料
- 準備工作
- 硬體
- NodeMcu esp8266,資料線*1,DHT11溫溼度模組,杜邦線若干
- 軟體
- 阿里雲物聯網平臺(又回到了阿里雲hhhh)
- 進入 控制檯,先開通
- 建立產品 - 標準品類選擇溫溼度檢測 - 建立 - 新增裝置
- 安裝 PubSubClient,ArduinoJson,DHT 庫
- 阿里雲物聯網平臺(又回到了阿里雲hhhh)
- 修改 PubSubClient.h
- #define MQTT_MAX_PACKET_SIZE 後面數字改為 1024
- #define MQTT_KEEPALIVE 後面數字改為 60
3.原始碼
#include <ESP8266WiFi.h>
/* 依賴 PubSubClient 2.4.0 */
#include <PubSubClient.h>
/* 依賴 ArduinoJson 5.13.4 */
#include <ArduinoJson.h>
#include <DHT.h> //呼叫DHT庫
/* 連線您的WIFI SSID和密碼 */
#define WIFI_SSID "Geohot" //"路由器SSID"
#define WIFI_PASSWD "zheng123+" //"密碼"
/* 裝置的三元組資訊*/
#define PRODUCT_KEY "a12FfFXIQgC" //"裝置PRODUCT_KEY"
#define DEVICE_NAME "ESP8266" //"替換DEVICE_NAME"
#define DEVICE_SECRET "aee1ff626995f85f43debede913e66a7" //"替換DEVICE_SECRET"
#define REGION_ID "cn-shanghai"
/* 線上環境域名和埠號,不需要改 */
#define MQTT_SERVER PRODUCT_KEY ".iot-as-mqtt." REGION_ID ".aliyuncs.com"
#define MQTT_PORT 1883
#define MQTT_USRNAME DEVICE_NAME "&" PRODUCT_KEY
#define CLIENT_ID "ESP8266|securemode=3,timestamp=1234567890,signmethod=hmacsha1|"
// 演算法工具: http://iot-face.oss-cn-shanghai.aliyuncs.com/tools.htm 進行加密生成password
// password教程 https://www.yuque.com/cloud-dev/iot-tech/mebm5g
#define MQTT_PASSWD "f8a546698d544b9fcd359d718f180095d1430f0f" //"參考上面password教程,演算法工具生成"
#define ALINK_BODY_FORMAT "{\"id\":\"ESP8266\",\"version\":\"1.0\",\"method\":\"thing.event.property.post\",\"params\":%s}"
#define ALINK_TOPIC_PROP_POST "/sys/" PRODUCT_KEY "/" DEVICE_NAME "/thing/event/property/post"
unsigned long lastMs = 0;
float RH,T,RH_sum,T_sum;
unsigned char count=0;
WiFiClient espClient;
PubSubClient client(espClient);
DHT dht(D1,DHT11); //設定Data引腳所接IO口和感測器型別
void callback(char *topic, byte *payload, unsigned int length)
{
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("] ");
payload[length] = '\0';
Serial.println((char *)payload);
}
void wifiInit()
{
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASSWD); //連線WiFi
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.println("WiFi not Connect");
}
Serial.println("Connected to AP");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
Serial.print("espClient [");
client.setServer(MQTT_SERVER, MQTT_PORT); /* 連線WiFi之後,連線MQTT伺服器 */
client.setCallback(callback);
}
void mqttCheckConnect()
{
while (!client.connected())
{
Serial.println("Connecting to MQTT Server ...");
if (client.connect(CLIENT_ID, MQTT_USRNAME, MQTT_PASSWD))
{
Serial.println("MQTT Connected!");
}
else
{
Serial.print("MQTT Connect err:");
Serial.println(client.state());
delay(5000);
}
}
}
void mqttIntervalPost()
{
char param[32];
char jsonBuf[128];
sprintf(param, "{\"CurrentTemperature\":%f}",T_sum/count);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
boolean d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
if(d){
Serial.println("publish Temperature success");
}else{
Serial.println("publish Temperature fail");
}
//https://www.cnblogs.com/ZhengBlogs/p/add.html
sprintf(param, "{\"CurrentHumidity\":%f}",RH_sum/count);
sprintf(jsonBuf, ALINK_BODY_FORMAT, param);
Serial.println(jsonBuf);
d = client.publish(ALINK_TOPIC_PROP_POST, jsonBuf);
if(d){
Serial.println("publish Humidity success");
}else{
Serial.println("publish Humidity fail");
}
}
//https://www.cnblogs.com/ZhengBlogs
void setup()
{
/* initialize serial for debugging */
Serial.begin(115200);
Serial.println("Demo Start");
wifiInit();
dht.begin();
}
// the loop function runs over and over again forever
void loop()
{
delay(1000); //延時1000毫秒
RH = dht.readHumidity(); //讀取溼度資料
T = dht.readTemperature(); //讀取溫度資料
RH_sum+=RH;
T_sum+=T;
count+=1;
Serial.print("Humidity:"); //向串列埠列印 Humidity:
Serial.print(RH); //向串列埠列印溼度資料
Serial.print("%");
Serial.print(" Temperature:");
Serial.print(T); //向串列埠列印溫度資料
Serial.println("C");
Serial.println("https://www.cnblogs.com/ZhengBlogs");
if (millis() - lastMs >= 30000)
{
lastMs = millis();
mqttCheckConnect();
/* 上報 */
mqttIntervalPost();
count=0;
RH_sum=0;
T_sum=0;
}
client.loop();
}
- 要修改的內容都已經寫在原始碼裡了,也可以使用 DHT22/SHTC3 等溫度感測器
- 人在杭州,身處寢室。這裡的資料也已經上傳到阿里雲上了(支援曲線和表格形式)
四、小結
- 物聯網前景很好,等我數電模電還有嵌入式開發學學好,就深入吧,今年會去參加一些電子設計競賽
- 對我在做的比較感興趣的朋友可以點點贊同,點點關注不迷路喔~ovo
- 再做一個預告:用python爬取知乎熱榜。
- 因為發現知乎熱榜都沒有地方有記錄,我上次想統計一個月內的最火事件,都統計不出來,決定自己做一個。應該要挺久的