本文旨在補充《超圖解Arduino互動設計入門》第十六章「網路家電控制」單元,增加另一個網頁控制範例,以及說明使用指標(pointer)設定多重字串陣列的語法。
本文將把《Arduino網路遠端遙控家電開關(一)》製作的HTML頁面,放到Arduino控制板上執行。首先把網頁裡面,不會變動的HTML碼和CSS樣式,存入Arduino的程式記憶體(相關說明請參閱16-4頁):
// 儲存HTML檔頭 P(htmlHead) = "<!doctype html><html>" "<head><meta charset='utf-8'>" "<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0'>" "<title>arduino@home</title>"; // 儲存CSS樣式 P(myCSS) = "<style type='text/css'>body {font-family:'微軟正黑體','黑體-繁',sans-serif;background-color:#CCC;}\n" ".sw {margin:0 0.5em;font-weight:bolder;}\n" ".on {color:#F00;}\n" ".off {color:#090;}\n" "#lights {border-radius:10px;-moz-border-radius:10px;-webkit-border-radius:10px;background-color:#FFFFFF;padding:1px;}\n" "#lights ul {list-style-type:none;padding-left:0px;font-size:24pt;}\n" "#lights ul li {margin:10px 0;border-bottom:1px dotted #CCCCCC;padding-bottom:5px;}\n" "#lights ul li a {display:block;text-decoration:none;color:#000;}\n</style>"; // 儲存HTML頁腳 P(htmlFoot) = "</body></html>";
底下是Webduino程式庫所需,處理預設命令(亦即:顯示首頁)的程式碼(相關說明請參閱16-4頁):
void defaultCmd(WebServer &server, WebServer::ConnectionType type, char *, bool) { server.httpSuccess(); if (type != WebServer::HEAD) { // 顯示網頁內容 showPage(server); } }
實際負責顯示網頁內容的程式碼,寫在名叫showPage()的自訂函數中,它接收一個WebServer類型的參數,透過這個參數,程式將能把網頁輸出給用戶端。
定義控制腳位編號及名稱
程式一開始,定義3個常數,儲存Arduino的控制輸出腳位,以及控制腳位的名字(如:”檯燈”和“熔岩燈”),好讓程式能產生動態頁面。
與控制腳位相關的3個常數定義如下:
// Arduino的輸出腳位編號 const byte swPins[] = {3, 5, 6, 7, 8, 9}; // 用指標陣列存放控制腳位名稱,參閱下文說明。 const char *swNames[] = {"檯燈", "壁燈", "吊燈", "落地燈", "熔岩燈", "藤球燈"}; // 共有6個控制輸出端 const byte NUM_OF_SW = 6;
Arduino官方的Ethernet以太網路控制板,當中的數位腳位編號4,保留給SD記憶卡的晶片選擇線使用,請不要挪做他用。
數位10~13腳是SPI介面的預設腳位,用於控制以太網路晶片,也請不要使用。
建立多重字串陣列指標
我們需要先定義好每個控制腳位的名稱,才能讓後續的迴圈程式取用。如5-15頁提到的,Arduino程式(C語言)採用陣列來存放字串,那麼,要儲存一組字串,就需要用到二維陣列了。
假設要在str陣列中儲存“str 1”, “str 2”和“str 3”這三個字串,底下兩種寫法都行:
假如每一組字串的長度不固定,元素的長度必須要確保能存入最長的字串,例如,以下的字串陣列中,“Android”佔7 個字元,因此元素的長度至少必須是8。
但是,那些用不滿8個字元空間的短字串(如:“iOS”),剩餘的空間就浪費掉了。
比較好的寫法是採用指標,如書本8-41頁提到,我們可以用指標變數來存取陣列元素。底下的敘述建立了一個包含3個指標元素的陣列,分別參照到3個字元陣列:
用指標記錄多個字串,就不會有空間被浪費掉。
因此,本程式透過一個名叫swNames的指標陣列,儲存6個控制腳位名稱。
動態顯示控制腳位狀態的網頁
讀取控制腳位值,並以HTML網頁形式輸出給用戶端的自訂函數,showPage()的程式原始碼如下,其中的for迴圈,將讀取6個控制腳位狀態,進而動態組成清單項目(<li>標籤)和超連結(<a>標籤)元素。
如果讀取到的數位腳是高電位,就在網頁上顯示ON;若是低電位,則顯示OFF:
接收並處理開關的查詢字串值
本單元的範例網頁裡的每個開關選項,都是超連結。每個選項連結都連到Arduino的自訂命令“sw”,並且附帶傳送id參數。例如,第一個選項的連結是“sw?id=0”,也就是以GET方式,傳送id為0的參數給sw頁面(請參閱16-31頁的「接收並處理透過GET方法傳送的查詢字串」單元):
本程式的setup()函數,指定將sw頁面的請求,交給自訂函數getCmd處理:
void setup() { // 設定輸出腳位 for (byte i = 0; i < NUM_OF_SW; i++) { pinMode(swPins[i], OUTPUT); } Ethernet.begin(mac, ip, gateway, subnet); webserver.setDefaultCommand(&defaultCmd); // 處理「首頁」請求 webserver.addCommand("sw", &getCmd); // 處理「sw頁面」請求 webserver.begin(); }
自訂函數getCmd()的程式原始碼如下,因為預期的參數(亦即,id)和數值(0~5),都沒有超過兩個字,因此,筆者將接收URL參數的陣列長度設定成3(含字串結尾的Null字元)。
下載Arduino網路遠端家電控制的原始碼
Arduino官方的以太網路擴充板(Arduino Ethernet Shield),大約消耗180mA電流(W5100晶片本身約消耗150mA);Arduino UNO Rev 3控制板本身約消耗50mA電流(參閱《認識與實驗Arduino的睡眠模式》這篇貼文),兩者合計約230mA。
測試時如果發生不穩定的狀況,例如,顯示的網頁不完整,或者無法如預期般接收參數控制的情況,請將Arduino控制板接上外接電源再測試,不要接電腦的USB電源供電。
老師您好!WebServer的問題解決了,但我遇到新的問題是,因為我用的Ethernet版子是Seeed studio出的W200,我有找到他的資料庫,但他的資料庫名稱為EthernetV2_0.h,想請教老師,我只要將原本的Ethernet.h 改為 EthernetV2_0.h就可以嗎?因為我是過這方法後好像會有問題!還是是有需要改其他的地方呢?
剛剛查看了Seeed studio的W200乙太網路卡的規格,它採用的網路晶片是Wiz5200。Ardiuno原廠的乙太網路卡採用是Wiz5100晶片,而且Webduino程式庫是基於原廠的Ethernet程式庫,應該是這個原因,這個程式庫無法在你的網路卡上運作。
thanks,
jeffrey
老師你好 請問一下
如果希望每個開關,能同時間定時控制(例如:第1個開關設定30秒開、第2個開關設定1分鐘開),是不是要再多增加timer1、timer2的物件是嗎? 這樣主記憶體吃的很大,還是說其實一個timer1就OK了。
只需要宣告一個Timer物件,再用條件判斷時間點即可。
thanks,
jeffrey
老師您好!感謝老師的解說!
想再請教一點,不論是Ethernet shield或是Wifi shield,都一定要在固定IP的環境下才能工作嗎?因為我在租屋處測試好像就已經無法連接網路!
也可以設置成DHCP(動態IP),請參閱「《超圖解Arduino互動設計入門》第二版補充說明」。
thanks,
jeffrey
老師您好
剛學ARDUINO不久 買了老師的書來看
想詢問一下
書本中網路家電控制是使用以太網路卡
手邊現在只有ESP8266
請問老師程式需如何修改才能做到一樣透過網頁來控制家電呢?
謝謝!
hi chimin:
ESP8266 WiFi無線網路控制模組,預設的韌體採用AT指令操作(如:查詢網路基地台、設定連線、查詢IP位址…等等)。
目前也有許多自製的ESP8266韌體,像這個韌體支援採用Arduino程式開發,因為它本身內建微控制器,不需要搭配其他Arduino板,可獨立運作。
但是,因為ESP8266的硬體結構,跟ATmega系列處理器以及本書使用的網路晶片不同,因此很多程式庫並不能直接在ESP8266上運作。
所以很抱歉,本書並不支援ESP8266。
Thanks,
jeffrey
了解
謝謝老師!!
老師你好:
之前你有教我使用”SimpleTimer程式庫”
下面程式說是計時器編號
// 每一秒執行一次repeatMe函式,並紀錄此計時器編號。
timerId = timer.setInterval(1000, repeatMe);
可是計時器編號到9次以上就沒法正常運作 只顯示timerId =-1,這樣往哪邊處理呢?
SimpleTimer程式庫的原始碼(SimpleTimer.h)第43行,定義了一個MAX_TIMERS常數,預設為10,請將它改成其他數字測試看看。
thanks,
jeffrey
了解囉!謝謝老師
不過增加了MAX_TIMERS常數,動態記憶體吃很大,這有辦法當MAX_TIMERS常數到達設定的數值後給他歸零,重新計數嗎?
當SimpleTimer的某個計時物件時間到時,它的callbacks陣列值會被歸零,以便讓出儲存空間給下一個計時程式物件;你可以縮小MAX_TIMERS常數值,或者重新設計程式庫。
thanks,
jeffrey
老師你好
之後研究了一下SimpleTimer的程式庫,還是看不太懂要如何修改程式庫,MAX_TIMERS常數設定10,所以計次最多10次,而超過10次的值都顯示-1,增加MAX_TIMERS常數導致動態記憶體消耗很大,之後有想設條件事方式,當計次大於10後歸0計次,程式庫不能這樣寫….
老師你好,數日前有提出問題,不知要如何才能找出此舊文?
你是指這一篇嗎?
thanks,
jeffrey
請問 我有一個4~20 mA輸出的設備,使用arduino+W5100,簡單的將設備數值顯示在網頁上,可是想從外網去看這個網頁是不是自己一定要有固定IP去NAT才有辦法看,還是有其他方式可以去看?
假如使用樹莓派+arduino也是一樣需要固定IP嗎?
hi joskyo:
不一定要有固定IP,但是有固定IP比較方便。只要在網路基地台上設定虛擬非軍事區或虛擬伺服器,即可從外部連入指定的設備。
thanks,
jeffrey
老師你好 我將這遙控家電改成接收數位跟類比的資料,網頁要怎麼去自動更新資料? 數位與類比腳假如沒有接上訊號是否可以判斷出來?
老師你好 網頁自動刷新有找到語法了,可是出現一個問題我有個點是開關控制,網頁刷新一次他就會跟著變動一次。這方面該怎麼處理?目前暫時google到處找資料 還請老師幫忙解惑。
hi joskyo:
沒有辦法判斷數位或類比腳是否有連接設備,但是你可以設計一個電路,讓它在週邊設備通電時,輸出一個高電位給Arduino。至於從網頁動態、持續傳遞訊息給伺服器端,需要用到JavaScript/AJAX或者WebSocket程式設計,這兩個主題並沒有包含在Arduino互動設計入門書籍。
thanks,
jeffrey
老師您好~我用您的方法後~~六顆繼電器都能控制(原始碼我只有改MAC與IP,其他都沒有變動)~短時間測試都正常~但是遇到一個問題~~我六個開關同時啟動時(RELAY上的指示燈都有亮,確定有控制到),短時間都正常,但是過了幾分鐘,UNO主板電源附近會變成非常的燙(輸入電源9V),有的時候會控制不了,RELAY上的LED指示燈也會變成比較暗,我是用UNO R3板(露天買的),我一共買三張UNO R3主板,有的會控制不了,有的主板會不斷重新啟動,目前RELAY都沒有接任何設備,純測試~~請問是不是主板上的5V電流不足呢?該怎樣解決呢?
hi gida:
因為電流不足的緣故,請把繼電器模組的輸入電源連接到外接電源。
thanks,
jeffrey
老師您好~~請問要怎樣外接電源呢?書上有提到嗎?我找了好久都找不到~~我把RELAY 的VCC 與GND接到另外一顆5V變壓器,控制線接到Arduino上~但Relay都沒有反應呢~~
假設你採用的繼電器模組類似16-36頁(內建電晶體放大電路),請參考11-8頁的伺服馬達外接電源說明,外接電源的接地要和Arduino控制板的接地相連。
thanks,
jeffrey
老師您好~~照您的方法行了 唷!!感謝您!!還有我發現好像直接接行動電源也可以正常使用~~但想請問老師~~如果用行動電源供電會不會造成甚麼問題呢?
另外我想要請問一下,如果想要在多控制幾組開關,除了1,2,可以用以外,還有別的腳可以用嗎?A0~A5可以使用嗎?是不是跟書上寫的一樣,A0=14 …直接使用就行了嗎?
外接電源的毫安數通常都夠大,所以可以驅動繼電器和模型馬達。沒錯,類比接腳也可以用。
have fun!
jeffrey
老師
請問一下,目前測試程式時
發現每次重整網頁
就會重複開關最後一次按的按鈕,
請問要如何修改呢?
hi jack:
上文範例的每個開關連結,傳送的資料只有開關編號,例如:
sw?id=0
根據getCmd()的處理邏輯,每次收到查詢字串時,它就會把該腳位的值反轉。若要確實指定開或關,首先要在查詢字串裡面加入數值,例如,底下的敘述可代表編號0的開關值為1。
sw?id=0&v=1
getCmd()也需要加入取出v值的敘述,相關說明和範例請參閱16-31頁。
thanks,
jeffrey
老師您好,本身是使用UNO R3 + W5100舊版的 套上本篇的程式碼 但是就無法顯示網頁(回應時間過長),不過ping倒是ping的到,如果使用clinect.print的話就沒有問題,目前就卡在webserver的方法行不通,測試後連defaultCmd的方法都沒有進來過,我也有使用範例程式碼還有書的光碟的程式碼,都是這個問題,還請老師幫麻解答 感恩!!
hi kenny:
請問你指的是,使用client.println()輸出網頁沒問題嗎?也就是上傳Arduino IDE軟體內建的「檔案→範例→Ethernet→WebServer」,可以順利執行,但是Webduino程式庫的程式卻不行嗎?
thanks,
jeffrey
老師您好
書一開始是教使用client.print出html 那部分 是沒問題的
但是本篇或光碟裡 使用webserver.h 我這裡會有問題
我事先有安裝好函式庫了,所以編譯上傳都會顯示編譯成功
(不過好像都會出現
D:\Coding\Coding Tool\arduino-1.6.8\libraries\WiFi\src\utility\wifi_drv.cpp: In static member function ‘static uint8_t WiFiDrv::getEncTypeNetowrks(uint8_t)’:
D:\Coding\Coding Tool\arduino-1.6.8\libraries\WiFi\src\utility\wifi_drv.cpp:451:10: warning: converting to non-pointer type ‘uint8_t {aka unsigned char}’ from NULL [-Wconversion-null]
return NULL;
^
D:\Coding\Coding Tool\arduino-1.6.8\libraries\WiFi\src\utility\wifi_drv.cpp: In static member function ‘static int32_t WiFiDrv::getRSSINetoworks(uint8_t)’:
D:\Coding\Coding Tool\arduino-1.6.8\libraries\WiFi\src\utility\wifi_drv.cpp:476:10: warning: converting to non-pointer type ‘int32_t {aka long int}’ from NULL [-Wconversion-null]
return NULL;
^)
卡就卡在當我dhcp取得ip 192.168.1.105
之後用這ip進入沒有任何回應,出現無法顯示網頁
ping卻都完全正常可以連線,loop()有成功進入,但webserver.processConnection();似乎沒有動作,因為連httpSuccess這方法都沒有動作,所以沒送出200ok 這跟我設成dhcp有關聯嗎?還是w5100有問題?程式本用函式庫範例跟老師您的還有我自己寫的都沒辦法成功,都是同樣的問題, 感恩!!
有可能是Arduino IDE版本不相容所導致,請在此頁面下載安裝Arduino舊版本(我目前使用的是1.6.5版)編譯看看,我在Windows 10上測試沒問題。
thanks,
jeffrey
老師您好
請問能不能使用ESP8266達到同樣效果?
可以達到相同效果,ESP8266使用Wi-Fi而非乙太網路卡,所以程式庫不同,你需要改寫程式碼。
thanks,
jeffrey
老師您好
能提示改哪邊嗎?
主要的原因是本文的網站伺服器採用Webduino程式庫建立,此程式庫是基於Ethernet程式庫,而Ehternet程式庫是基於W5100乙太網路晶片。
ESP8266也有對應的Ethernet程式庫可用,可驅動W5100晶片並透過有線乙太網路連線,如果你的目的是要透過這種方式聯網,那也許可行。
但如果你要直接運用ESP8266的Wi-Fi網路,那就得透過ESP8266WiFi和ESP8266WebServer等程式庫來撰寫網路程式,這些程式庫跟本文的Webduino不相容,並不是說不可行,只是你要用Wi-Fi程式庫的語法來重新改寫。
have fun!
jeffrey
” ESP8266也有對應的Ethernet程式庫可用,可驅動W5100晶片並透過有線乙太網路連線 ”
老師這段的意思是吃WIFI網路再由W5100出去嗎?
那如果我用ESP8266WebServer是用客戶端連到自己WIFI嗎?
老師 因為我要把電表各個資料傳到網路上 , 然後能用手機觀看並且能夠操作開關
1. 不是。若採用Ethernet程式庫,網路資料都是透過W5100收發。
2. ESP8266WebServer程式庫用於建立網站服務;若是要建立前端服務,可使用ESP8266HTTPClient程式庫。
have fun!
jeffrey
老師您好:
感謝老師的幫助 砍掉原本 + 函式庫 換了1.6.5 從放函式庫回去 沒有問題了!
謝謝老師!!
感謝告知!
thanks,
jeffrey
請問老師
我用 w5100+arduino mega2560
用老師給的範例 去做測試
在電腦上網頁都可以正常的控制
但是我用手機卻連不上網頁
手機跟電腦是同一台無線AP出來的 電腦接網路線 手機連WIFI
區段都一樣
我後來測試 電腦開手機模擬器 可以正常使用
最後我用arduino的範例 讀取5個類比值
電腦跟手機 都可以正常使用
請問是哪裡出了問題
hi miku:
如果你的手機系統是Android,建議安裝PingTools Network Utilities App,透過它可查看指定IP的裝置連線狀況。
我覺得應該是HTML的問題,也許是某個標籤指令出錯,讓網頁無法順利呈現,
thanks,
jeffrey
您好,我最近買了一個Webduino,使用Webduino Blockly 編輯器,請問在JavaScript的部分該怎麼撰寫像這樣智慧家電控制系統?
hi allison:
Webduino是國內廠商的硬體產品,本文採用的Webduino則是Arduino的一個乙太網路程式庫,我沒有用過Webduino硬體產品,至於Google的Blockly,我只稍微玩過幾次,拍謝!
thanks,
jeffrey
老師您好 我有2塊乙太擴展版分別是
舊版http://www.vetco.net/catalog/images/VUPN5784-1.jpg
新版http://site.gravitech.us/Arduino/ARD-ETH/ARD-ETH_1.jpg
不知道為什麼插上舊版就連程式都無法上傳
新版使用上完全沒有任何問題
請問舊版是不是有什麼硬體上的問題?
hi we:
我用的是舊版本乙太網路卡,並沒有問題,也許是你的擴展板故障了。
thanks,
jeffrey
另外還有個問題是
我想使用LCD顯示IP位址
使用dtostrf顯示小數位時都是00 也就是只有整數部分有值
並且請求網頁時(W5100擴展版會有紅色指示燈閃爍),有時候會自動reset 不用dtostrf就不會這樣
想請教該如何解決?
可能是dtostrf函式的buffer不夠大,假設轉換後的字元數為5個字,buffer長度要設定成6,以便容納字串的null結尾。
thanks,
jeffrey
“server.printP(htmlHead);” 每次驗證都是這裡的問題 “‘htmlHead’ was not declared in this scope”都會出現這行 想請問這會是哪邊錯了 我程式碼都沒改
剛剛使用1.6.13版本編譯沒問題,請問你用的IDE是哪個版本?
thanks,
jeffrey
你好,我也是在編譯時都會出現 “‘htmlHead’ was not declared in this scope”問題,我是使用1.6.12版本,請問這該怎麼解決呢?
剛剛在Windows 10平板上安裝1.16.3板,使用書本光碟裡的Streaming程式庫,以及新下載的Webduino程式庫,編譯沒問題。
thanks,
jeffrey
不好意思請問一下,我要是單用arduino wifi shield可以直接做出上方的這個範例嗎?
然後我之前在網路上做arduino+think speak的範例也都連接失敗
這是因為我的arduino wifi shield不支援嗎?
因為我之後專題可能會用到這塊板子上傳資料到資料庫中 然後是要透過網際網路來達成我的專題
但是我目前這一塊arduino wifi shield幾乎網路上只有區域網路的例子
有哪些是屬於網際網路的例子可以實際演練嗎?
本例的程式碼僅適用於W5100晶片的乙太網卡,
使用Wi-Fi Shield,程式要重新改寫。
至於think speak, 跟你用的網路卡無關,
也不是區域網路或者網際網路的問題,
它們都採用相同的乙太網路協定,
只要了解其中幾個程式的運作原理,
再延伸它應用,應該不難。
thanks,
jeffrey
老師你好請問一下,如果說我建構一個伺服器(固定IP),將網頁放在server端,Arduino 連線的是手機的Wifi ,請問這樣可以透過server端的網頁去控制Arduino嗎?它們是不同網段的
請參閱這一個回應。
thanks,
jeffrey
老師我想問開關 要如何改點動的 參考書裡哪呢?
或給修改方式 呢??
我不了解「點動」的意思,如果你想要更改網頁介面的話,要修改HTML碼。
thanks,
jeffrey
我想按下導通ON 放開OFF
請問老師 這要如何修改呢?
感謝
老師 您好,
這邊有兩個問題,想詢問一下
(1)如果我用手機APP(外網)連到ESP8266 web Server(內網) ,中間不透過雲端伺服器
這樣可行麼?
(2)承上,如果可行 那手機APP可以去識別由MCU所發送出來的網頁格式麼?
1. 可以,請參閱這一篇回應。
2. 如果你要自己寫APP,跟ESP8266的交換訊息用JSON格式即可。
thanks,
jeffrey
老師 您好,
關於 2021/09/03 所提問的問題,目前已經實現了 非常謝謝老師的指導
想知道一下這個做法到底對不對,或有需要改進的地方 在麻煩老師給個建議
我的做法是用MIT inventor,寫一個很簡易的APP 只要按LED_ON按鈕它就會
發一個http://118.xxx.xxx.xxx:3310/ledon到Esp8266的web server
UART看到的訊息
+IPD,0,173:GET /ledon HTTP/1.1
User-Agent: Dalvik/2.1.0 (Linux; U; Android 6.0.1; HTC_D10u Build/MMB29M)
Host: 118.xxx.xxx.xxx:3310
Connection: Keep-Alive
Accept-Encoding:gzip
到這邊也確實可以做LED控制也能回傳資料,而我web server所回的資料如下
char *Basic_inclusion_LED_ON =”HTTP/1.1 200 OK\n\
Content-Type: text/html\n\
Connection: close\n\n\
\n\
\n\
\n\
\n\
LED__ON\n\
“;
如上述過程,這樣不透過json格式來做溝通,似乎好像也可以,但我發現APP似乎
會有偶發性出現Url的錯誤,這邊我可能在看一下。
備註:
1.參考老師的 12-44頁這邊 “Content-type”,”application/json” ,這邊我的理解是當有使用到ifttt.com功能時需要用json來做應答,ifttt.com這個伺服器是用json格式來跟你做資料握,有錯在麻煩老師指正一下,如果像我上述用button的做法是否就不需要用json格式來和APP交握了?
2.目前ESP8266-01橋接的MCU是選用 STMH7XX系列的型號非Arduino,如果真的有需要json的格式的應答機制是否要去找相應的lib來做或是自己寫?
在麻煩老師 解答一下,雖然有做出來也不確定這樣到底是不是對的,心中還是有很多疑惑 哈哈
JSON是通用的訊息格式,如果你的東東只限於自家使用,不必和外界交流,那麼,訊息用任何文字格式都可以。
thanks,
jeffrey
老師 您好,
您上次建議,用json通訊格式和ESP8266已經實現,且效果很好,真的非常謝謝老師~
我這邊還有個問題,想再跟老師 請教一下,敘述如下
目的:要達成類似MQTT推播功能,ESP8266->手機
參考連結: https://randomnerdtutorials.com/esp8266-nodemcu-web-server-sent-events-sse/
問題:
(1)Server-Sent Events(SSE)這個東東,可以和ESP內建的server + json通訊格式做結合麼?有需要再加上
HTML格式或是加上特殊的AT command麼?
(2)承上,如果可以結合,那我通訊格式是否要回HTML..的格式或是一般HTTP /1.1 200 OK+ json格式
就好呢?
(3)承問題(1)、(2),假設非得一定要使用HTML或其他網頁格式的話,我用APP的背景程式,偷偷做網路通訊格式交握,是否也可以?如果可以我該去找什麼資料來參考呢?
以上問題,再麻煩老師解惑一下,感謝~
Server-Sent Events可以理解為單向傳播式WebSocket,只能從伺服器傳送資料到用戶端。
至於伺服器要傳送什麼格式的資料,你自己決定就好,可以傳送JSON。