---
# System prepended metadata

title: I2C LAB
tags: [嵌入式]

---

# I2C Lab

#### 組員: A1105129 吳祥毅 M1115114 楊皓翔
#### 指導老師:林宏益
---
### 一、實驗目的
1. 使用CSI camera 完成驅動，並進行拍照
1. 使用I2C協定完成:
(A) Random byte read 
(B) Random byte write
### 二、實驗原理
1. 利用內建函式庫的照片拍攝程式
2. 利用I2C協定完成24LC02與樹莓派的溝通
### 三、實驗材料
1. 筆電(Ubuntu 20.04)
2. 樹莓派
3. 24LC02
### 四、實驗步驟&成果
1. **實驗一** 
    (1) 使用 `sudo raspi-config`指令，將相機功能與Glamor啟用。
    (2) `nano /boot/config.txt`，修改`gpu_mem=144`
    (3) 在命令列輸入`raspistill -o output1.jpg`，以拍攝照片
    (4) 插入USB至樹莓派，將照片傳到USB再用電腦打開照片
    ![fdsa.jpg](https://hackmd.io/_uploads/rJCjkbx7p.jpg =80%x)

    **成果**
    ![](https://hackmd.io/_uploads/Bk_mNelQT.jpg =60%x)
2. **實驗二**
    (1)利用杜邦線將與24LC02對應的PIN腳連接
    ![](https://hackmd.io/_uploads/ryUdCelQa.jpg =60%x)
    (2)在命令列輸入`i2cdetect -y 1` ，確認I2C的裝置位址`0x50`
    ![](https://hackmd.io/_uploads/B18-gZlQp.jpg)
    (3)程式撰寫
    ```python= 
    import smbus
    import time
    bus = smbus.SMBus(1)
    time.sleep(1)
    red
    while 1 :
        write_reg    = int(input("Write Which Register:"))
        write_value  = int(input("value:"))
        bus.write_bus_byte_data(0x50,write_reg,write_value)
        time.sleep(1) #不加時間延遲會報錯
        read_reg     = int(input("Read Which Register:"))
        read_value   = bus.read_bus_byte_data(0x50,read_reg)
        print("Value :",read_value)
    ```
    **成果**
    ![](https://hackmd.io/_uploads/BykSQWxmT.jpg =80%x)

### 五、實驗討論&心得
在I2C實驗中，因為沒加上時間延遲`time.sleep(1)`，導致程式不斷報錯，雖然變得愈加挫折，但在解決完BUG時，仍有很大的成就感。在實驗中時常出現報錯情形，透過增加實作累積經驗，越來越能掌握到錯誤所在並加以改進。
### 六、參考文獻
:::danger
參考文獻 : 
 * [助教的HackMD](https://hackmd.io/@neko-yoru/rJrW8nbkp) //  [Stackoverflow Fix IOError](https://stackoverflow.com/questions/52735862/getting-ioerror-errno-121-remote-i-o-error-with-smbus-on-python-raspberry-w)
:::
:::info
* 編輯人員 ：[name=吳祥毅] 
:::
