---
# System prepended metadata

title: Raspberry Pi 4 透过 Arduino Uno Mega328p 连接到 mh-sensor-series光敏電阻感測器
tags: [Raspberry Pi]

---

---
tags: Raspberry Pi
---
# Raspberry Pi 4 透过 Arduino Uno Mega328p 连接到 mh-sensor-series光敏電阻感測器

## 成果影片
[Raspberry Pi 4 透过 Arduino Uno Mega328p 连接到 mh-sensor-series光敏電阻感測器](https://youtu.be/0Lhhka7zmHo)

## 硬件
1.Raspberry Pi 4
![a414cd74b47f8238bdc39e105056e79](https://hackmd.io/_uploads/Bynv8ZFTR.jpg)
2.Arduino Uno Mega328P
![b89b849a5f10bb6fcf06556e3067d19](https://hackmd.io/_uploads/H1UtI-t6A.jpg)
3.mh-sensor-series光敏電阻感測器
![950ce7b413d19f06340bcbc12d2991b](https://hackmd.io/_uploads/rkYq8WKTC.jpg)

## 软体
1.[安装Arduino开发程式](https://www.arduino.cc/en/software)
2.设定Arduino序列埠
![57582fa0bebe55f86821c62e885d6ad](https://hackmd.io/_uploads/BkDyD-KpC.png)
3.设定Arduino开发板
![3a897876fc34855ec2cf3c764ab46f3](https://hackmd.io/_uploads/HydlwbKaR.png)
4.将Python程式放入Raspberry Pi 4
![6c052fed9adf3dd550e8de693f3a650](https://hackmd.io/_uploads/ryhZw-FpA.png)

## 接线
1.mh-sensor-series光敏電阻感測器 以下简称mss
2.Arduino Uno Mega328P以下简称328p
3.mss VCC to 328p 3.3v
4.mss GND to 328p GND
5.mss A0 to 328p A0

## 程式
1.Arduino Mega328p_mh-sensor-series.ino
```
int sensorPin = A0;  // 光敏电阻连接的引脚
void setup() {
    Serial.begin(9600); // 设置串口通信速率
}

void loop() {
    int sensorValue = analogRead(sensorPin); // 读取模拟值
    Serial.println(sensorValue); // 通过串口发送数据
    delay(100); // 延时
}
```
2.Raspberry Pi 4 Python Raspberry Pi_Mega328p.Py
```
import serial

ser = serial.Serial('/dev/ttyUSB0', 9600)  # 打开串口

while True:
    if ser.in_waiting > 0:
        line = ser.readline().decode('utf-8').rstrip()
        print(line)  # 输出光敏电阻的值
```

## GPT总结
你可以使用Raspberry Pi 4与MH-Sensor-Series光敏电阻传感器进行连接，即使你没有MCP3008这样的模拟数字转换器（ADC），你仍然可以利用你现有的硬件组合（Mega328p或STM32F072）来实现这一目的。下面是一些方法：

### 方法1：使用Mega328p作为ADC
Mega328p（即Arduino Uno的核心微控制器）可以用作模拟数字转换器，并通过串行通信（如I2C、SPI或UART）将数字信号传输给Raspberry Pi 4。

#### 步骤：
1. **设置Mega328p**:
   - 连接光敏电阻到Mega328p的模拟输入引脚（如A0）。
   - 设置一个电阻器与光敏电阻器串联以形成一个分压电路。
   - 使用Arduino IDE编写一个简单的代码，将模拟值读取并通过串行接口发送给Raspberry Pi。

    示例代码（Arduino IDE）：
    ```cpp
    int sensorPin = A0;  // 光敏电阻连接的引脚
    void setup() {
        Serial.begin(9600); // 设置串口通信速率
    }

    void loop() {
        int sensorValue = analogRead(sensorPin); // 读取模拟值
        Serial.println(sensorValue); // 通过串口发送数据
        delay(100); // 延时
    }
    ```

2. **将Mega328p与Raspberry Pi连接**:
   - 使用USB线将Mega328p连接到Raspberry Pi，Raspberry Pi将Mega328p识别为一个串行设备（通常是`/dev/ttyUSB0`或类似的设备）。
   - 在Raspberry Pi上编写一个Python脚本，从串口读取数据。

    示例代码（Raspberry Pi Python）：
    ```python
    import serial

    ser = serial.Serial('/dev/ttyUSB0', 9600)  # 打开串口

    while True:
        if ser.in_waiting > 0:
            line = ser.readline().decode('utf-8').rstrip()
            print(line)  # 输出光敏电阻的值
    ```

### 方法2：使用STM32F072作为ADC
STM32F072同样可以作为一个模拟数字转换器，并通过串行接口将数据传输给Raspberry Pi。

#### 步骤：
1. **设置STM32F072**:
   - 连接光敏电阻到STM32的ADC引脚。
   - 配置STM32以读取光敏电阻的值，并通过UART、I2C或SPI接口发送给Raspberry Pi。

   你可以使用STM32的开发环境（如STM32CubeMX和Keil或STM32CubeIDE）来生成代码。配置串行通信、ADC通道等。

2. **将STM32与Raspberry Pi连接**:
   - 使用串行接口（如UART或I2C）将STM32与Raspberry Pi连接。
   - 类似于Mega328p的例子，在Raspberry Pi上编写Python脚本，读取STM32发送的数据。

### 总结
通过使用Mega328p或STM32F072作为ADC设备，Raspberry Pi可以间接地读取光敏电阻传感器的模拟信号。这个方法利用了你现有的硬件资源，而不需要额外购买MCP3008或其他ADC芯片。选择具体的方法取决于你对两种微控制器的熟悉程度和项目需求。