:::

4-2 esp8266 基本測試

一、測試程式
#include <SoftwareSerial.h>

SoftwareSerial mySerial(7, 8); // RX, TX

void setup() {
  Serial.begin(9600);
  mySerial.begin(9600);
}

void loop() { 
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

程式上傳後,開啟「序列埠監控視窗」,確認鮑率為「9600」,行結尾「 NL & CR」,輸入AT 按 Enter 或 傳送,則會回應OK,表示測試成功

 

二、AT指令種類

資料來源:http://ruten-proteus.blogspot.com/2014/12/esp8266-at-command.html

與esp8266溝通所用的指令,叫AT指令,每一條指令可以分四種命令:

  1. 測試命令

    AT+指令=?

    =? 用於查詢設置指令或內部設置的參數,以及其取值範圍;白話一點,就是測試剛剛下的 AT+指令 是否成功
  2. 查詢命令

    AT+指令?

    返回該指令的當前設定值
  3. 設置命令

    AT+指令=...

    =... 用來設置用戶自定義的參數值
  4. 執行命令

    AT+指令

    用來執行模組內部已定義的程序


   要注意下面幾點:

  • 不是每條 AT 指令都具備上面 4 種命令
  • 前後若加上雙引號代表字串

 

三、常用AT指令

資料來源:http://yhhuang1966.blogspot.com/2015/07/esp8266-wifi-at-command.html

以下指令皆可測試看看,確認esp8266可以正常運作。

  1. AT:基本測試
    AT

    OK
  2. AT+GMR : 取得韌體版本
    AT+GMR                                                                          
    0018000902-AI03                                                                
                                                                                    
    OK  
    可見目前版本是 0902.
  3. AT+RST : 重新起始 ESP8266
    AT+RST                                                                          
                                                                                    
    OK                                                                              
    7!aS?'??!G?R??                                                            
    [Vendor:www.ai-thinker.com Version:0.9.2.4]                                     
                                                                                    
    ready  
  4. AT+CIOBAUD?  : 查詢鮑率 (位元速率)
    +CIOBAUD:9600

    OK
  5. AT+CWMODE? : 查詢目前工作模式
    AT+CWMODE?                                                                      
    +CWMODE:2                                                                       
                                                                                    
    OK      
    可見目前是模式 2 (AP 基地台模式), 1=STA 網卡模式, 3=BOTH (AP+STA).
    注意, 下完 CWMODE 最好再用 CWRST 重啟, 以確認設定有完成.  
  6. AT+CWMODE=1 : 修改工作模式為 1 (STA) 網卡模式
    AT+CWMODE=1                                                                     
                                                                                    
    OK                                                                              
    AT+CWMODE?                                                                      
    +CWMODE:1                                                                       
                                                                                    
    OK    
    要修改為雙重模式就在等號後面指定為 3 即可. 注意, STA 與 AP 模式有各自的 IP, 在 STA 模式下未連線前 IP 為預設之 0.0.0.0, 連線後基地台會配發一個 192.168.X.X 的 IP; 改為 AP 或 BOTH 模式後, ESP8266 會自行配發 192.168.4.1 的 AP IP, 故 BOTH 模式下會有兩個 IP. 

    AT+CWMODE=3

    OK
    AT+CIFSR
    192.168.4.1     (這是 ESP8266 當 AP 的 IP)
    192.168.2.105 (這是 ESP8266 當 STA 的 IP)
  7. AT+CIFSR : 查詢 IP 位址

    AT+CIFSR                                                                        
    192.168.4.1                                                                     
                                                                                    
    OK

    注意, 作為 STA 時,  若尚未用 CWJAP 連線基地台, 則預設 IP 為 0.0.0.0, 連線後才會被指派一個 192.168.X.X 的 STA 區域 IP. 如果 ESP8266 是在 AP/BOTH 模式, 則下 CIFSR 會看到兩個 IP, 一個是 STA IP, 另為一個是基地台 SoftAP IP. 
  8. AT+CWLAP : 列出附近偵測得到的基地台
    注意, 此指令只能在 STA (=1) 與 BOTH (=3) 模式下才會回應, 在 AP 模式下會出現 ERROR.
    AT+CWLAP                                                                        
    +CWLAP:(2,"edimax.setup",-71,"74:da:38:15:16:00",1)                             
    +CWLAP:(3,"bryan",-90,"78:54:2e:26:66:28",1)                                    
    +CWLAP:(3,"TP-LINK_33C1",-86,"c4:e9:84:66:33:c1",4)                             
    +CWLAP:(4,"ching",-84,"54:b8:0a:84:f4:70",5)                                    
    +CWLAP:(4,"HOME",-70,"04:8d:38:52:ea:f7",6)                                     
    +CWLAP:(4,"alex",-85,"fc:75:16:01:26:0c",6)                                     
    +CWLAP:(4,"andy",-85,"fc:75:16:02:61:60",6)                                     
    +CWLAP:(1,"JANE-WIRELESS",-94,"00:24:01:ad:a0:65",6)                            
    +CWLAP:(4,"RFTQAD",-93,"c8:d3:a3:5f:d8:fd",9)                                   
    +CWLAP:(3,"TP-LINK_601A04",-73,"e8:de:27:60:1a:04",10)                          
    +CWLAP:(4,"EDIMAX-tony",-44,"90:1f:02:2d:5a:9f",11)  我的基地台                     
    +CWLAP:(3,"CHT5668",-89,"d8:fe:e3:5c:c0:fb",11)                                 
    +CWLAP:(3,"MOTOROLA-5N6F",-89,"f8:35:dd:74:d2:b6",11)                           
    +CWLAP:(3,"45-9",-91,"d8:fe:e3:e6:90:87",11)                                    
    +CWLAP:(3,"family",-89,"6c:19:8f:b7:9a:79",1)                                   
                                                                                    
    OK
    回應訊息的格式為 : +CWLAP:(ecn,ssid,rssi,mac,mode)
    第一個參數是加密方式 ecn :
    0 OPEN (不加密)
    1 WEP
    2 WPA_PSK
    3 WPA2_PSK
    4 WPA_WPA2_PSK
    第二個參數是服務設定識別碼 SSID (即基地台代號), 第三個是接收的射頻信號強度 (dBm), 均為負值, 越負信號越弱, 最大值是 0. 第四參數是實體位址 MAC, 第五參數據 "More AT Command Information Found" 說是連接模式, 0 為手動 (manual), 1 為自動 (auto). 但上面測試卻有 0, 1 以外的值. 據 "ESP8266 WiFi module" 這篇則說是 channel, 似乎較合理, 因為 CWJAP 指令也無法設定手動或自動啊!
  9. AT+CWJAP="SSID","PWD" : 連線指定之基地台 (Join AP)
    AT+CWJAP="EDIMAX-tony","123456789111"                                          
                                                                                    
    OK  
    連線成功後再下 AT+CIFSR 查詢新指派的 IP, 還沒下 CWJAP 連線前為 0.0.0.0  :                                                                            
    AT+CIFSR                                                                        
    192.168.2.105   
    這時可在相同網域的電腦 ping 此 IP, 檢查連線是否可傳送資料 :

    C:\Users\petertw89>ping 192.168.2.105
    Ping 192.168.2.105 (使用 32 位元組的資料):
    回覆自 192.168.2.105: 位元組=32 時間=110ms TTL=255
    回覆自 192.168.2.105: 位元組=32 時間=18ms TTL=255
    回覆自 192.168.2.105: 位元組=32 時間=35ms TTL=255
    回覆自 192.168.2.105: 位元組=32 時間=55ms TTL=255

    192.168.2.105 的 Ping 統計資料:
        封包: 已傳送 = 4,已收到 = 4, 已遺失 = 0 (0% 遺失),
    大約的來回時間 (毫秒):
        最小值 = 18ms,最大值 = 110ms,平均 = 54ms   
  10. AT+CWJAP? : 查詢目前連線到哪一個基地台
    AT+CWJAP?
    +CWJAP:"EDIMAX-tony"

    OK
  11. AT+CWQAP : 離開目前連線的基地台
    AT+CWQAP

    OK
    這時再下 AT+CWJAP? 查詢連線之基地台時就會回應 ERROR :
    AT+CWJAP?

    ERROR
    這時下 CWFSR 原來指配的 IP 192.168.2.105 會消失, 回到預設 0.0.0.0
    AT+CIFSR
    0.0.0.0

    OK
  12. AT+CIPSTART : 建立 TCP/UDP 連線
    AT+CIPSTART="TCP","www.google.com",80

    OK
    Linked
    這樣就與遠端主機建立 TCP 連線了.
    AT+CIPSTART="UDP","192.43.244.18",123

    OK
    這樣就與遠端主機建立 UDP 連線了.
  13. AT+CIPSTATUS : 查詢目前 IP 連線狀態
    AT+CIPSTATUS
    STATUS:3
    +CIPSTATUS:0,"TCP","74.125.203.101",80,0

    OK

    回應訊息格式 : +CIPSTATUS:id,type,addr,port,tetype
    id 為連線通道編號, 最後面的 tetype 為 ESP8266 角色, 0 為 client, 1 為 server.
    表示目前與 IP 74.125.203.101 的 80 port 已建立了 TCP 連線 (2 表示已取得 IP 尚未連線, 3 表示 Connected, 4 表示 disconnected). 回應中的 0 為 id. 
  14. AT+CIPCLOSE : 關閉 IP 連線
    AT+CIPCLOSE

    OK
    Unlink
  15. AT+CWSAP? : 查詢 SoftAP 的設定
    此指令只有當 ESP8266 工作於 AP/BOTH 模式時才有用, 在 STA 模式下此指令會得到 ERROR 回應.

    AT+CWMODE=3   先改為 BOTH 模式

    OK
    AT+CWSAP?
    AT+CWSAP:"ESP_9CBD07","",6,0    預設 ssid, pwd, ch, ecn

    OK

    回應顯示預設未設密碼, 最後一個參數為加密方式, 預設 0=未加密, 見 CWLAP 指令. 而 ssid 是 ESP8266 作為 AP 的網路識別, 後面是其 MAC 號碼. ecn 是加密方式.
  16. AT+CWSAP="ssid","pwd",ch,ecn : 更改 AP 的設定 (只在 AP/BOTH 模式有效)

    AT+CWSAP="MYESP","1234567890",6,4

    OK
  17. AT+CWLIF : 查詢有哪些 Client 連線至此 AP (只在 AP/BOTH 模式有效)
    AT+CWLIF
    192.168.4.100,74:e1:b6:0e:f5:67 

    OK
  18. AT+CIPMUX? : 詢問目前 TCP/UDP 連線模式
    這是設定 ESP8266 與同一 WiFi 網路中其他裝置的連線模式, 預設為單一連線, 如果要讓 ESP8266 當伺服器用, 必須設為 1=多重連線. 

    AT+CIPMUX?
    +CIPMUX:0       (多重連線關閉, 即單一連線模式)

    OK
  19. AT+CIPMUX=1 : 設定 TCP/UDP 連線模式為多重連線
    如果要讓 ESP8266 當伺服器, 讓網域中的客戶端進行 TCP/UDP 連線, 必須開啟多重連線. 

    AT+CIPMUX=1 

    OK
    如果要取消 ESP8266 的伺服功能, 恢復單一連線功能, 須將 CIPMUX 設為 0 :
    AT+CIPMUX=1

    OK
  20. AT+CIPSERVER=mode[,port] : 設定是否開啟 ESP8266 為伺服器
    用 CIPMUX=1 開啟多重連線後, 就可以用 CIPSERVER 設定 ESP8266 的伺服器功能. mode=1 為開啟伺服器, 必須指定 port; mode=0 為關閉伺服器, 不須指定 port. 在單一連線下開啟伺服器, 會得到 ERROR 回應.

    AT+CIPSERVER=1,8087

    OK

    這樣 ESP8266 伺服器就會傾聽 8087 埠, 這時就可在同網域的電腦連線 ESP8266 伺服器了. 我下載克里斯寫的 Connector-Test.air 安裝後選擇當 Client, 連線 ESP8266 的 STA IP, 連線成功且能雙向傳遞訊息. 用書上的 Java Client 網路程式來測試也 OK. 

    重複開啟伺服器會回應 no change :

    AT+CIPSERVER=1,8081
    no change

    關閉伺服器後必須重啟 ESP8266 (AT+RST), 其回應為 : 

    AT+CIPSERVER=0
    we must restart
  21. AT+CIPSTO? : 查詢伺服器逾時計時器設定值 (秒)

    AT+CIPSTO?
    +CIPSTO:180

    OK

    預設是 180 秒
  22. AT+CIPSTO=timeout : 設定伺服器逾時計時器 (0~7200 秒)

    AT+CIPSTO=200

    OK

    其實不管設定為多少秒, 它都回應 OK, 但實際最多只能計時到 7200 秒.

搜尋

錯誤訊息
未知: Array and string offset access syntax with curly braces is deprecated 在檔案中的第 /include/functions.encoding.php 列 40
未知: Array and string offset access syntax with curly braces is deprecated 在檔案中的第 /include/functions.encoding.php 列 40
未知: Array and string offset access syntax with curly braces is deprecated 在檔案中的第 /include/functions.encoding.php 列 73
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 505
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 505
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
未知: Function get_magic_quotes_gpc() is deprecated 在檔案中的第 /class/libraries/vendor/xoops/xmf/src/Request.php 列 119
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined variable: disabled 在檔案中的第 /modules/tad_book3/function.php 列 818
通知: Undefined index: bootstrap 在檔案中的第 /modules/tadtools/preloads/core.php 列 68
已棄用
資料庫語法
0.000076 - SET SQL_BIG_SELECTS = 1
0.000799 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '1') ORDER BY conf_order ASC
0.000276 - SELECT sess_data, sess_ip FROM session WHERE sess_id = '4hb1kd6s5mrsa5ofm66vqs4dqe'
0.000278 - SELECT * FROM modules WHERE dirname = 'tad_book3'
0.000569 - SELECT COUNT(*) FROM group_permission WHERE (`gperm_modid` = '1' AND (`gperm_groupid` = '3') AND `gperm_name` = 'module_read' AND `gperm_itemid` = '9')
0.000308 - SELECT * FROM config WHERE (`conf_modid` = '9') ORDER BY conf_order ASC
0.000499 - select a.tbsn,a.title,b.author,a.category,a.page,a.paragraph,a.sort from tad_book3_docs as a left join tad_book3 as b on a.tbsn=b.tbsn where a.tbdsn='390'
0.000189 - SELECT tbsn,title FROM tad_book3 ORDER BY sort
0.000350 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '5') ORDER BY conf_order ASC
0.000319 - SELECT COUNT(*) FROM banner
0.000140 - SELECT * FROM banner LIMIT 2, 1
0.004044 - UPDATE banner SET impmade = 1275695 WHERE bid = 3
0.000405 - SELECT * FROM config WHERE (`conf_modid` = '0' AND `conf_catid` = '3') ORDER BY conf_order ASC
0.001201 - SELECT DISTINCT gperm_itemid FROM group_permission WHERE gperm_name = 'block_read' AND gperm_modid = 1 AND gperm_groupid IN (3)
0.001032 - SELECT b.* FROM newblocks b, block_module_link m WHERE m.block_id=b.bid AND b.isactive=1 AND b.visible=1 AND m.module_id IN (0,9) AND b.bid IN (1,2,3,4,5,6,7,8,9,10,11,18,15,16,20,19,58,60,61,73,72,74,71,76,75,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,111,109,110,112,113,114,115,116,117,118,119,120,121,122,123) ORDER BY b.weight, m.block_id
0.000708 - SELECT f.*, s.tpl_source FROM tplfile f LEFT JOIN tplsource s ON s.tpl_id=f.tpl_id WHERE (`tpl_tplset` = 'default' AND `tpl_file` = 'system_block_search.tpl') ORDER BY tpl_refid
0.003648 - update tad_book3_docs set `count` = `count`+1 where tbdsn='390'
0.000362 - select * from tad_book3_docs where tbdsn='390'
0.000185 - select * from tad_book3 where tbsn='21'
0.000247 - select mid from modules where dirname='tad_book3'
0.000567 - desc `tad_book3_data_center` `sort`
0.000239 - select `col_sn`,`data_name`,`data_sort`, `data_value` from `tad_book3_data_center` where `mid`= '9' and `col_name`='read_tbdsn_date' and `col_sn`='390' order by `sort` , `data_sort`
0.002020 - select tbdsn,title,content,category,page,paragraph,sort,enable,uid,from_tbdsn from tad_book3_docs where tbsn='21' and `enable`='1' order by category,page,paragraph,sort
0.001143 - select tbdsn,title,category,page,paragraph,sort from tad_book3_docs where tbsn='21' and (`content` != '' or `from_tbdsn` != 0) and enable='1' order by category,page,paragraph,sort
0.000301 - SELECT * FROM modules WHERE dirname = 'tadtools'
0.000386 - SELECT * FROM config WHERE (`conf_modid` = '4') ORDER BY conf_order ASC
0.000186 - select mid from modules where dirname='tad_book3'
0.000402 - desc `tad_book3_data_center` `sort`
0.000205 - select `col_sn`,`data_name`,`data_sort`, `data_value` from `tad_book3_data_center` where `mid`= '9' and `col_name`='video_tbdsn_date' and `col_sn`='390' order by `sort` , `data_sort`
0.000290 - select groupid,name from groups
0.000543 - select * from `tad_book3_files_center` where `col_name`='mp4' and `col_sn`='390' and `kind`='file' order by sort limit 0,1
0.000405 - select `tt_theme`,`tt_use_bootstrap`,`tt_bootstrap_color`,`tt_theme_kind` from `tadtools_setup` where `tt_theme`='school2015'
0.000568 - SELECT f.*, s.tpl_source FROM tplfile f LEFT JOIN tplsource s ON s.tpl_id=f.tpl_id WHERE (`tpl_tplset` = 'default' AND `tpl_file` = 'tadbook3_index.tpl') ORDER BY tpl_refid
0.000390 - SELECT * FROM modules WHERE dirname = 'tad_themes'
0.000410 - SELECT * FROM config WHERE (`conf_modid` = '3') ORDER BY conf_order ASC
0.000230 - select `tt_bootstrap_color` from tadtools_setup where `tt_theme`='school2015'
0.000421 - select * from tad_themes where `theme_name`='school2015'
0.000291 - select conf_value from config where conf_title ='_MD_AM_DEBUGMODE'
0.000310 - select * from tad_themes_blocks where `theme_id`='7'
0.000211 - select mid from modules where dirname='tad_themes'
0.000619 - desc `tad_themes_data_center` `sort`
0.000280 - select `col_sn`,`data_name`,`data_sort`, `data_value` from `tad_themes_data_center` where `mid`= '3' and `col_name`='theme_id' and `col_sn`='7' order by `sort` , `data_sort`
0.000257 - select conf_value from config where conf_name ='allow_register'
0.000398 - select `mid`, `name`, `dirname` from modules where isactive='1' and hasmain='1' and weight!=0 order by weight
0.000243 - SELECT * FROM modules WHERE dirname = 'tad_blocks'
0.000276 - select conf_value from config where conf_title ='_MD_AM_DEBUGMODE'
0.000253 - select count(*) from priv_msgs where `to_userid` ='0' and `read_msg`=0 group by `to_userid`
0.000402 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='0' and status='1' order by position
0.000200 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='11' and status='1' order by position
0.000202 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='14' and status='1' order by position
0.000155 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='15' and status='1' order by position
0.000205 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='17' and status='1' order by position
0.000165 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='16' and status='1' order by position
0.000143 - select `menuid`, `itemname`, `itemurl`, `target`, `icon`, `link_cate_name`, `link_cate_sn`, `read_group` from tad_themes_menu where of_level='18' and status='1' order by position
0.000476 - select a.* from tad_themes_files_center as a left join tad_themes as b on a.col_sn=b.theme_id where a.`col_name`='slide' and b.`theme_name`='school2015'
0.000281 - SELECT * FROM modules WHERE dirname = 'tad_login'
0.000314 - SELECT * FROM config WHERE (`conf_modid` = '14') ORDER BY conf_order ASC
總計: 57
區塊
搜尋: 沒有快取
總計: 1
額外資訊
包含檔案: 204 檔案
使用記憶體: 7078888 bytes
計時
XOOPS 使用 0.138 秒來載入。
XOOPS Boot 使用 0.028 秒來載入。
Module init 使用 0.008 秒來載入。
XOOPS output init 使用 0.038 秒來載入。
Module display 使用 0.033 秒來載入。
Page rendering 使用 0.029 秒來載入。