可視化訊號對於數字無感的人還蠻好用的, 有顏色跟圖就可以很清楚了解數值的好壞
[實作] 將ESP的信號強度數值傳送到Thinkspeak 後台去做信號可視化處理
實作將分為以下兩個部分:
[正文開始]
[秘訣] 筆者是設定rssi 及throughput, 後者這次可能不會用到
以下僅列出程式碼中需要注意的部分:
* 設定Channel ID, Read_API_Key, Field 數量及編號
strength = thingSpeakRead(CHANNEL_ID, '{CHANNEL ID}',READ_API_KEY,'{READ_API_KEY}',1,'fields',[1]);
* 設定每個裝置在平面圖上的位置
X = [11 450 450 20 60 334 393 139 238 327 443 235 343 457 476]';
Y = [11 11 310 310 393 310 202 162 140 148 151 222 258 294 198]';
picture = imread('XXX.png');
[秘訣] 圖片的部分, ThinkSpeak 網站只能讀取沒有轉址的圖片檔案, 筆者是使用blogspot中插入圖片並直接提取html中的網址的方式, 作法如下:
(1) 到blogspot, 新增草稿, 任意上傳一個圖片 (筆者任意上傳一張圖片)
(2) 切換到HTML模式, 可以看到圖片網址 (下圖黃色畫線處)
8. ESP 端, 在main.py 加入下面的code (匯入usocket 模組, 設定ThingSpeak 模板)
try:
import usocket as socket
except:
import socket
import ussl as ssl
THINGSPEAK_POST_TEMPLATE = """
POST /update HTTP/1.1
Host: api.thingspeak.com
Connection: close
X-THINGSPEAKAPIKEY: %s
Content-Type: application/x-www-form-urlencoded
Content-Length: %d
%s
"""
API_THINGSPEAK_HOST = 'api.thingspeak.com'
API_THINGSPEAK_PORT = 443
THINGSPEAK_WRITE_KEY = '{YOUR THINGSPEAK_WRITE_KEY}'
def sendto_ThingSpeak(sv):
s = socket.socket()
ai = socket.getaddrinfo(API_THINGSPEAK_HOST, API_THINGSPEAK_PORT)
addr = ai[0][-1]
s.connect(addr)
s = ssl.wrap_socket(s)
data = 'field1=%.2f' % (sv)
http_data = THINGSPEAK_POST_TEMPLATE % (THINGSPEAK_WRITE_KEY, len(data), data)
s.write(http_data.encode())
s.close()
[秘訣] 關於信號強度顏色繪製的部份, 在繪製時需要注意以下幾點: