Standard SDK: [RTL8195] 透傳 – 使用 Ameba 當作 Wi-Fi 透傳

準備

此教學中使用到的工具及程式碼:

Ameba 透傳

透傳即是透明傳輸,即傳送網絡無論傳輸業務如何,只負責將需要傳送的業務傳送到目的節點,同時保證傳輸的質量即可,而不對傳輸的業務進行處理。
使用Ameba實現AT透傳,大致可分為兩步實現:建立連接,發送/接收數據。

  • Ameba UART 透傳
    主MCU通過UART連接Ameba,使用AT 指令讓Ameba連接到服務器,完成數據的上傳和接受服務器推送數據。
    教程中,選用PC作為通過串口工具模擬主MCU UART發送數據。
  • 開發板/模塊開機測試
    (注:這裡的開發板/模塊並不針對某一款開發板或模塊,方法對所有Ameba開發板或模塊有效)
    通過Ameba LOG UART測試Ameba是否正常開機。
    Ameba有一組LOG UART用於接收用戶輸入和系統信息輸出,其引腳為GPIOB_0(LOG_UART_OUT)、GPIOB_1(LOG_UART_IN).

    • Ameba 開發板
      如果使用開發板(一般開發板會配置USB轉串口芯片,連接micro USB到LOG UART),使用一根micro USB 線連接開發板到PC。
      開發板一般使用micro USB供電,具體情況,依據開發闆說明。否則需要在VCC引腳供電,Ameba使用3.3V供電。
    • Ameba Wi-Fi 模塊
      如果使用模塊(一般只會引出Ameba的PIN),這時候需要用杜邦線連接PC串口TX和RX分別到模塊的GPIOB_1和GPIOB_0. 並且在VCC引腳供電,Ameba使用3.3V供電。
      Ameba LOG UART默認配置為:波特率38400,數據位8,校驗None,停止位1,無流控。
      在PC上使用串口調試助手(推薦使用SecureCRT)打開對應串口,默認設置如下:
      1
      連接串口之後,輸入“help”,串口打印信息如下,如未打印如下信息:
      1. 檢查供電是否正常
      2. 請檢查串口是否連接正常(TX,RX是否反接)
      3. 出現亂碼,檢查串口設置是否正確
      2
  • 升級AT固件
    1. 使用image tool下載完整固件(RTL871xAF_AT_v2.2.1.bin)到開發板
    2. 使用OTA升級到最新AT固件v2.2.x.(RTL871xAF_AT_v2.2.1_OTA.bin)
    檢查開發板AT指令版本,在串口中輸入“AT”,如果響應unknown command 'AT',
    那麼對應AT版本為V1,否則為V2

    • AT V1 升級
      1. 連接Ameba到AP, 並確保PC和Ameba處在同一個網絡下
      假設AP: SSID=test, PASSWORD=12345678
      連接到AP方法如下:
      ATW0=test
      ATW1=12345678
      ATWC
      2. 在PC 端進入OTA 升級服務器的目錄​​DownloadServer(../SDK/ tools/DownloadServer),根據readme.txt修改並運行:start.bat(如果出現權限問題,點擊右鍵使用管理員權限運行)
      3. 在串口中端輸入升級命令,等待升級完成,系統會重啟
      ATWO=192.168.0.1,8080(ex: PC 端的地址為:192.168.0.1,端口為8080)
    • AT V2 升級
      1. 設置Ameba為STA模式,連接Ameba到AP, 並確保PC和Ameba處在同一個網絡下。
      假設AP: SSID=test, PASSWORD=12345678
      連接到AP方法如下:
      ATPW=1
      ATPN=test,12345678
      2. 在PC 端進入OTA 升級服務器的目錄​​DownloadServer(../SDK/ tools/DownloadServer),根據readme.txt修改並運行:start.bat(如果出現權限問題,點擊右鍵使用管理員權限運行)
      3. 在串口中端輸入升級命令,等待升級完成,系統會重啟
      ATSO=192.168.0.1,8080(ex: PC 端的地址為:192.168.0.1,端口為8080)
    • AT V2 UART 連接
      V2固件使用一組獨立的AT UART(RX: GPIOA_0/TX: GPIOA_4)作AT command的輸入和響應,使用杜邦線連接開發板與PC串口TX和RX分別到Ameba GPIOA_0和GPIOA_4。
      測試固件升級成功,通過AT UART確認AT固件版本號為v2.2.x.
      AT指令参照:AT command 說明
      3

TCP/UDP服務器配置

本教程使用TCP/UDP測試工具sokit 1.3,建立TCP/UDP服務器,通過Ameba透傳數據到服務器。
4
服務器配置方法:
1. 服務器配置在局域網
服務器(TCP/UDP)和客戶端需要搭建在同一網絡中(要么同時搭在路由器上要么同時搭載模塊上(AP mode)).
2. 服務器配置在廣域網
服務器可以搭建在具有公網IP的主機上,此時需要Ameba能夠接入internet,實現遠程連接。

多鏈接指令傳輸

Ameba支持多路socket連接,Host MCU可以同時和多個服務器或者設備通信。為了區分多個socket鏈路,會在串口傳輸指令中附帶socket的鏈路id。

TCP指令傳輸

使用sokit建立TCP服務器,端口號設定為5000。
1. 使用”ATPW”設置Ameba為STA,執行”ATPN”讓Ameba連接到一個沒有加密的AP(SSID:iot_tplink)
5
2. 使用”ATPC”讓Ameba創建TCP客戶端並且連接到TCP服務器,並保持連接
6
3. 使用”ATPK”設置自動接收數據
7
開啟自動接收,Ameba會主動推送數據給HOST MCU。如果沒有開啟自動接收,HOST MCU需要通過“ATPR”訪問Ameba的接收緩存。
4. 使用”ATPT”發送數據到服務器
8
該命令通過Ameba向服務器發送17字節的信息“Hello,TCP server.”,在服務器端,可以看到TCP鏈路信息和接收到的信息:
9
5. 服務器向客戶端發送數據
在服務器界面選中當前TCP鏈路,連續兩次分別發送信息“Hello, Ameba”,“This is TCP server”。 HOST MCU也會同步的收到兩次推送。
10
HOST 端串口打印信息如下:
11
6. 使用“ATPD”關閉指定的TCP的連接,釋放socket資源
12

UDP指令傳輸

使用sokit建立UDP服務器,端口號設定為5000。
1. 使用”ATPW”設置Ameba為STA,執行”ATPN”讓Ameba連接到一個沒有加密的AP(SSID:iot_tplink)
13
2. 使用”ATPC”讓Ameba創建UDP客戶端,並記錄服務器ip和port
14
Ameba創建UDP 之後,內部會佔用一個socket通道,返回“OK”以及connection id(此connection id並不是指一個實際的鏈接,只是綁定到UDP socket),此id會用作發送數據的參數。
3. 使用”ATPK”設置自動接收數據
15
開啟自動接收,Ameba會主動推送數據給HOST MCU。如果沒有開啟自動接收,HOST MCU需要通過“ATPR”訪問Ameba的接收緩存。
4. 使用”ATPT”發送數據到服務器
16
該命令通過Ameba向服務器發送17字節的信息“Hello,UDP server.”,在服務器端,可以看到UDP鏈路信息和接收到的信息。
17
5. 服務器向客戶端發送數據
選中Ameba和服務器的UDP鏈路(sokit會保留UDP client信息(ip,port)一段時間,需要在信息失效前,向客戶端發送信息),連續兩次分別發送信息“Hello, Ameba”,“This is UDP server”。 HOST MCU也會同步的收到兩次推送。
18
HOST 端串口打印信息如下:
19
6.使用“ATPD”關閉指定的UDP的連接,釋放socket資源
20

單鏈接純數據透傳(TT模式)

在純數據透傳模式下,串口輸入不需要帶任何協議或指令,僅支持單一連接,TCP和UDP類似,所有串口輸入將會被發送到目標地址。
Ameba在接收字符後,如果在20ms內沒接收到新的字符,將觸發一次發送。

TCP純數據透傳

使用sokit建立TCP服務器,端口號設定為5000。
1. 使用”ATPW”設置Ameba為STA,執行”ATPN”讓Ameba連接到一個沒有加密的AP(SSID:iot_tplink)
1
2. 使用”ATPC”讓Ameba創建TCP客戶端並且連接到TCP服務器,並保持連接
2
Ameba創建TCP連接之後,會返回“OK”以及connection id (此id綁定TCP鏈路信息)。
3. 使用”ATPU”設置進入數據透傳模式
3
成功返回’>’後進入透傳模式之後,此時,任何串口輸入將被發送到TCP服務器,並且串口窗口不會有任何回顯。連續兩個字符需要在20ms內傳送,否則Ameba將分成多次傳送。
通過串口發送“Hello, TCP Server”,可以在服務器端看到如下消息:
4
4. 服務器向客戶端發送數據
在服務器界面選中當前TCP鏈路,連續兩次分別發送信息“Hello, Ameba”,“This is TCP server”。
5
HOST MCU也會同步的收到兩次推送。
6
5. 使用”----”發送數據到服務器
7
連續在串口輸入4個 ’-’,Ameba將退出數據透傳模式,回到常規模式。此時串口中端將會回顯一個‘#’符號。
此時TCP連接任然保持。

UDP純數據透傳

方法與TCP透傳類似,參考前一章節。

Arduino + Ameba UDP 指令傳輸實例

使用Arduino UNO配置Ameba實現UDP透傳,硬件連接如下:
21

使用sokit建立UDP服務器,端口號5000.
22

在Arduino IDE中打開 Rtl871xAF_Example.ino (下載: 透傳範例程式碼), 根據實際情況修改一下參數,編譯下載程式。
23

等待約10秒,Arduino會一直向UDP服務器發送“Hello Server”,服務器端可以看到如下消息。
24