物聯網實境遊戲應用課程
libraries
資料夾#include <library_name.h>
map.dat
storage/emulated/0
] /Android/data/com.LanKuDot.iotBRC/files
storage/emulated/0/
,但實際位置為內存,因此助教列出三個可能的檔案路徑,正確的檔案路徑會有上述路徑的資料夾8 字元 16 進制 RFID SN (大寫)
空格
2 字元 x 座標
空格
2 字元 y 座標
空格
4 字元地圖類型 0xNN
C5B538D5 01 02 0x22
MSG_ROUND_END
與中控台連線並能夠與所有其他連線的 BRCClient 傳遞訊息的 API。
由於 BRCClient
是 public 繼承自 KSM111_ESP8266
,所以可以直接透過 BRCClient
的物件直接使用 KSM111_ESP8266
的成員函式。
這個函式庫使用 SoftwareSerial
做為與 WiFi 模組溝通的介面,注意 SoftwareSerial
做為 RX
腳位的限制,Arduino Uno 只有 pin 2, 3 可以做為 RX。
使用函式庫:#include <BRCClient.h>
建構子:BRCClient(int Rx, int Tx, int resetPin = -1)
BRCClient
物件並初始化 SoftwareSerial
Rx
:SoftwareSerial
的 RX pin,與模組的 TXD pin 相接Tx
:SoftwareSerial
的 TX pin,與模組的 RXD pin 相接resetPin
:可不指定,與模組的 RST pin 相接連線到 BRC Server:bool beginBRCClient(const char *ssid, const char *passwd, const char *serverIP, const int port)
SoftwareSerial
,需要呼叫 KSM111_ESP8266::begin()
來啟用ssid
:AP 的名稱passwd
:AP 的密碼,""
代表為無密碼serverIP
:server 的 IPport
:server 的 porttrue
成功連線到 server離開 BRC Server:bool endBRCClient()
發訊息:bool sendMessage(CommMsg *msg)
true
傳送成功收訊息:bool receiveMessage(CommMsg *msg)
msg
中true
有訊息傳入CommMsg
BRCServer 與 BRCClient 之間主要的通訊資料結構,所有通訊資料都會以此資料結構打包傳送。
0x00
(\0
, null terminated character) 會視為訊息結束資料 ID 有對應的 macro 定義在 CommMsg.h
中
MSG_REGISTER:0x01,註冊通訊裝置的代表 ID
type
:MSG_REGISTER
ID
:要註冊的 ID (1 byte)buffer
:無type
:MSG_REGISTER
ID
:剛剛註冊的 IDbuffer
:"OK"/"FAIL"
0xFF
:尚未有有效 ID0x01~0x0F
:特殊用途
0x01
:BRC serverMSG_REQUSET_RFID:0x10,詢問 RFID SN 對應的座標
type
:MSG_REQUEST_RFID
ID
:無buffer
:4 bytes 的 RFID serial numbertype
:MSG_REQUEST_RFID
ID
:0x01buffer
:4 bytes RFID serial number + 1 byte x 座標 + 1 byte y 座標 + 1 byte 類型
MapMsg.h
MSG_ROUND_COMPLETE:0x11,回傳回合完成
type
:MSG_ROUND_COMPLETE
ID
:無buffer
:無MSG_ROUND_END
給所有通訊裝置 (包含最後發送回合完成的裝置)MSG_ROUND_START:0x20,回合開始
type
:MSG_ROUND_START
ID
:0x01
buffer
:無MSG_ROUND_END:0x21,回合結束
type
:MSG_ROUND_END
ID
:0x01
buffer
:無MSG_CUSTOM:0x70,發送自訂訊息給其他連線的裝置
type
:MSG_CUSTOM
ID
:接收訊息的裝置 IDbuffer
:自定訊息,長度不能超過 COMM_MSG_BUF_LEN - 1
type
:MSG_CUSTOM
ID
:發送者的 ID,以區分來自其他 client 的訊息buffer
:"OK"/"FAIL"
type
:MSG_CUSTOM
ID
:發送者的 IDbuffer
:自定訊息,長度不能超過 COMM_MSG_BUF_LEN - 1
MSG_CUSTOM_BROADCAST:0x71
,廣播自訂訊息給所有連線裝置
type
:MSG_CUSTOM_BROADCAST
ID
:無buffer
:自定訊息,長度不能超過 COMM_MSG_BUF_LEN - 1
type
:MSG_CUSTOM
ID
:發送者的 ID,以區分來自其他 client 的訊息buffer
:"OK"type
:MSG_CUSTOM
ID
:發送者的 IDbuffer
:自定訊息,長度不能超過 COMM_MSG_BUF_LEN - 1
與 WiFi 模組溝通的基本 API,使用 AT command 操作。
啟用 SoftwareSerial
:bool begin(long baudrate)
SoftwareSerial
並測試模組有無正確啟動baudrate
:設定 SoftwareSerial
的 baudratetrue
模組整確啟動重設與重啟模組:bool softreset()
true
成功重啟設定預設 baudrate:bool setBaudrate(long baudrate)
SoftwareSerial
的 baudratetrue
成功設定MFRC522
是與 MF-RC522 模組溝通的基本 API,而 RFID
則是以 public 繼承自 MFRC522
建構子:RFID(int selectPin, int resetPowerDownPin)
selectPin
:與模組的 SDA pin 相接resetPowerDownPin
:與模組的 RTPD pin 相接初始化並啟用模組:void begin()
pcdReset()
、pcdInit()
、pcdAntennaOn()
來重設與啟用模組模組天線:void pcdAntennaOn()
, void pcdAntennaOff()
偵測有無 RFID tag:uint8_t find_tag(uint16_t *card_type)
card_type
:輸出記錄 16-bit 的卡片類型資訊STATUS_OK
:有偵測到 tagSTATUS_TIMEOUT
:沒有偵測到 tagSTATUS_ERROR
:tag 資訊讀取出錯STATUS_COLLISION
:有多組 tag 出現STATUS_PCD_NO_RESPONSE
:模組出錯讀取 tag serial number:uint8_t readTagSN(uint8_t *sn, uint8_t *snBytes)
sn
:存放讀取到的 serial number 的 buffer,至少 4 bytes,至多 10 bytessnBytes
:記錄在 sn
中有多少 bytes 是有效的STATUS_OK
,正確讀出 serial number