# Wire.h 來源:https://www.arduino.cc/en/Reference/Wire 持續學習中,如有錯誤歡迎留言賜教 ## Wire.begin() / Wire.begin(address) 前者以master的身分加入網路中,後者以slave身分加入網路中 address: 7bit從機地址 ## Wire.requestFrom() Master跟從機要求資料,並可用available()和read()接收回傳的資料 ### Syntax Wire.requestFrom(address, quantity) Wire.requestFrom(address, quantity, stop) ### Parameters - address: 被請求的從機的7-bit地址 - quantity: 請求多少byte的資料 - stop : 布林值,為真時,在結束傳送請求後,傳送一個停止訊號並釋放匯排流,為否時,持續請求資料並保持連接。 ### Returns byte : 從機回傳的位元組數目 ## Wire.beginTransmission(address) 傳送一個起始信號,告知從機準備開始傳送資料 ### Syntax Wire.beginTransmission(address) ### Parameters address: 7bit從機地址 ## Wire.endTransmission() 結束一個藉由beginTransmission()開始並由write()做傳輸的動作。 ### Syntax Wire.endTransmission() Wire.endTransmission(stop) ### Parameters stop : 布林值,為真時,在停止訊號傳送後,會釋放匯排流;為否時,會送出restart訊號,並保持連接。 ### Returns - int: 顯示傳輸狀態 - 0:success - 1:data too long to fit in transmit buffer - 2:received NACK on transmit of address - 3:received NACK on transmit of data - 4:other error ## write() 發送資料 ### Syntax Wire.write(value) Wire.write(string) Wire.write(data, length) ### Parameters - value: 要傳送的數值(1byte) ???? - string: 要傳送的字串 - data: 要傳送的byte陣列 - length: 要傳送的byte數 ### Returns - byte: 回傳寫入多少bytes(可選) ??? ## Wire.available() 接收資料,主機用於接收requestFrom()回傳的資料或是從機接收onReceive()的資料 ### Parameters None ### Returns The number of bytes available for reading. ## read() 當master以requestFrom()請求資料後,用read()接收從slave發回的資料。 ### Syntax Wire.read() ### Parameters none ### Returns 下一個接收的byte ## Wire.setClock() 設定i2c傳送的時脈,通常設定100KHz為基本時脈 ### Syntax Wire.setClock(clockFrequency) ### Parameters clockFrequency: 時脈數,可依據規格書調整,通常100KHz(標準模式),400KHz(快速模式),如有其他模式,請參照規格書 ### Returns None ## Wire.onReceive(handler) slave用來接收來自master的請求或資料 ### Syntax Wire.onReceive(handler) ### Parameters handler: slave用來接收來自master的函式,以void myHandler(int numBytes)方式被呼叫 ### Returns None ## Wire.onRequest(handler) master接收來自slave回傳的資料 ### Syntax Wire.onRequest(handler) ### Parameters handler:以void myHandler()方式被呼叫 ### Returns None # Note: 參考:https://hugheschung.blogspot.com/2019/01/i2carduino-python_30.html # 邏輯 Wire.onRequest(handler) handler為接收到要求後做處理的函式 Wire.onReceive(handler) handler為接收到資料後做處理的函式 rpi以write_byte傳入後,arduino以Wire.read()讀取1byte範圍為0~255