Webduino Note === ## 觀察 1. 基本上測量值的時候,不同的值才會產生新的事件。例如 Photocell 的開始偵測,其實是根據每次取樣時間所量測的值,如果和上一次不同的話,就產生新的事件。 2. 體驗版可以把目前的結果暫存起來,會得到一個連結網址;Pro版則是用檔名來儲存,而且有容量限制(一般是20個,用優惠卷可以增加數量)。Pro版的儲存容量相對比較受限,但可以使用匯出匯入的方式來補足容量的不足,也可以使用 jsbin 來存放自己的專案。 3. 偵測板子狀態,可使用這個擴充模組:https://fustyles.github.io/webduino/DeviceStatus_20181109/blockly.json 會得到以下的新模組 ![](https://i.imgur.com/tuH54yS.png) 然後可以再根據其狀態做相應的處理。 4. 在大陸地區會連上大陸的 Server,其他地區會連上另一個 Server ```javascript= WebArduino.DEFAULT_SERVER = 'wss://ws.webduino.io:443'; WebArduino.SERVER_CHINA = 'wss://ws.webduino.com.cn'; ``` ## 實驗 1. 偵測板子狀態的擴充模組: ![](https://i.imgur.com/y5eTbpl.png) - 先連上,執行有反應。接著斷線,會顯示 ERROR。這時再把板子連上,沒有反應了。 - 先不連上,執行後等一段時間,會顯示 ERROR。這時再把板子連上,沒有反應。 - 先不連上,執行後再趕快連上板子,結果可能顯示 ERROR,版本號 (連上時會即刻傳送版本號),或數值,然後停止,也可能正常操作。 ==> 應該是看哪一個事件先發生,基本上只要發生 ERROR,板子就掛了,事件偵測也終止。 - 如果希望斷線後(或未連線就執行)再把板子接上,仍然能夠正常執行的話,必須重新執行這個模組方塊,可以使用以下的接法(連上時設定狀態為 1,未連上設定狀態為 0) ![](https://i.imgur.com/q0wU656.png) 2. 使用 boardReady: ![](https://i.imgur.com/cQHYD0S.png) - 先連上,執行有反應。接著斷線,會顯示 ERROR。這時再把板子連上,沒有反應了。 - 先不連上,執行後沒有反應。 3. 用上面方塊產生程式碼,然後在 board options 後面加上 true 參數,這樣即使一開始板子沒有連線,每隔 5 秒也會重新檢查一次連線狀態,那等板子連上線之後就可以正常執行。不過要注意,當板子斷線之後,如果已經出現 ERROR (可能要30秒左右),那麼再重新連上線還是可以正常執行;如果還沒出現 ERROR,然後就重新連線的話,量測會中斷。這時只要讓它重新顯示 ERROR 之後再重新連線就可以了。 ![](https://i.imgur.com/MkQ0sB7.png) 4. 跟板子有關的事件和訊息編號 ```javascript= var BoardEvent = { ANALOG_DATA: 'analogData', DIGITAL_DATA: 'digitalData', FIRMWARE_VERSION: 'firmwareVersion', FIRMWARE_NAME: 'firmwareName', STRING_MESSAGE: 'stringMessage', SYSEX_MESSAGE: 'sysexMessage', PIN_STATE_RESPONSE: 'pinStateResponse', READY: 'ready', ERROR: 'error', BEFOREDISCONNECT: 'beforeDisconnect', DISCONNECT: 'disconnect', RECONNECT: 'reconnect' }; /** * Message command bytes (128-255/0x80-0xFF) * https://github.com/firmata/protocol/blob/master/protocol.md */ var DIGITAL_MESSAGE = 0x90, ANALOG_MESSAGE = 0xE0, REPORT_ANALOG = 0xC0, REPORT_DIGITAL = 0xD0, SET_PIN_MODE = 0xF4, REPORT_VERSION = 0xF9, SYSEX_RESET = 0xFF, START_SYSEX = 0xF0, END_SYSEX = 0xF7; // Extended command set using sysex (0-127/0x00-0x7F) var SERVO_CONFIG = 0x70, STRING_DATA = 0x71, // SHIFT_DATA = 0x75, // I2C_REQUEST = 0x76, // I2C_REPLY = 0x77, // I2C_CONFIG = 0x78, EXTENDED_ANALOG = 0x6F, PIN_STATE_QUERY = 0x6D, PIN_STATE_RESPONSE = 0x6E, CAPABILITY_QUERY = 0x6B, CAPABILITY_RESPONSE = 0x6C, ANALOG_MAPPING_QUERY = 0x69, ANALOG_MAPPING_RESPONSE = 0x6A, REPORT_FIRMWARE = 0x79, SAMPLING_INTERVAL = 0x7A; // SYSEX_NON_REALTIME = 0x7E, // SYSEX_REALTIME = 0x7F; ```