Подключение аналоговых датчиков к Raspberry Pi через MCP3008 — сборка, настройка SPI и пример Python-кода
Готовы считывать аналоговые сигналы с Raspberry Pi? Это руководство проведет через подключение MCP3008 АЦП, включение SPI, установку библиотек и запуск базового Python-скрипта для получения данных датчика.
Шаг 1: Подключение MCP3008
- Питание (3,3 В) — VDD и VREF к выводу 3,3 В Pi (красный).
- Земля — AGND и DGND к GND Pi (черный).
- SPI-соединения —
- CLK → Pi pin 23 (GPIO11) — оранжевый.
- DOUT → Pi pin 21 (GPIO9) — желтый.
- DIN → Pi pin 19 (GPIO10) — синий.
- CS → Pi pin 24 (GPIO8) — фиолетовый.
- Аналоговые входы — подключите сигнальный провод датчика к одному из выводов A0–A7 MCP3008 (левая сторона чипа). Используйте 3,3 В для V+ и GND для G–.
Убедитесь, что полукруглый вырез чипа направлен как на диаграмме. Для MCP3004 распиновка идентична, только 4 аналоговых входа.
Шаг 2: Включение SPI на Raspberry Pi
- Откройте терминал и выполните:
sudo raspi-config
- Перейдите в Advanced Options → SPI и включите.
- Перезагрузите Pi:
sudo reboot
- После перезагрузки проверьте наличие SPI-устройств:
ls /dev/
Должны появитьсяspidev0.0иspidev0.1. - Если отсутствуют, обновите систему:
sudo apt-get update && sudo apt-get upgrade
затем установите последнюю прошивку:sudo wget https://goo.gl/1BOfJ -O /usr/bin/rpi-update sudo chmod +x /usr/bin/rpi-update sudo rpi-update sudo reboot
Разблокировка I²C (если нужно)
Иногда I²C в черном списке, мешая SPI. Откройте файл черного списка:
sudo nano /etc/modprobe.d/raspi-blacklist.conf
Удалите или закомментируйте строки с blacklist i2c-bcm2708, затем перезагрузитесь.
Шаг 3: Установка Python-библиотеки SPI
- Установите предварительные пакеты:
sudo apt-get install python-dev git
- Клонируйте репозиторий py-spidev:
git clone https://github.com/doceme/py-spidev
- Установите библиотеку:
cd py-spidev sudo python setup.py install
Шаг 4: Пример Python-кода
Создайте mcp3008.py в домашней директории:
nano ~/mcp3008.py
Вставьте следующий скрипт:
# mcp3008.py
import spidev
import time
# Открыть SPI bus 0, device 0
spi = spidev.SpiDev()
spi.open(0, 0)
spi.max_speed_hz = 1350000
def read_channel(channel):
if channel < 0 or channel > 7:
return -1
adc = spi.xfer2([1, (8 + channel) << 4, 0])
data = ((adc[1] & 3) << 8) + adc[2]
return data
try:
while True:
value = read_channel(0) # Чтение с канала 0
print(f"Channel 0: {value}")
time.sleep(1)
except KeyboardInterrupt:
spi.close()
print("Program terminated")
Запустите скрипт:
python3 ~/mcp3008.py
Вы увидите непрерывный поток сырых значений АЦП (0–1023). Конвертируйте в напряжение или единицы датчика по даташиту MCP3008.
Ссылки
Производственный процесс
- Основы ввода-вывода в C#: Console.WriteLine, ReadLine и форматирование
- Raspberry Pi и HDC2010: полное руководство по настройке I2C датчика температуры и влажности
- Сборка логгера температуры на Raspberry Pi с $5 I2C датчиком
- Точный температурный профиль Raspberry Pi с Python, SQLite и LabVIEW
- ИК-датчик температуры TMP006 с Raspberry Pi: библиотека Python и руководство по настройке
- Создание удалённого датчика температуры на Raspberry Pi и Python — пошаговое руководство
- Создание метеостанции на Raspberry Pi с ежедневными email-отчётами о погоде
- Удалённый мониторинг погоды на Raspberry Pi 3 с PubNub
- Подключение ультразвукового датчика HC‑SR04 к Raspberry Pi 3 — полное руководство
- Интеграция TI SensorTag с Blynk через Node‑RED на Raspberry Pi Zero