Подключение второго Ethernet порта к Raspberry PI
Как-то раз, я захотел сделать маршрутизатор на Raspberry PI. Имея USB wifi-адаптер, я создал мини wifi сеть по квартире, но захотелось сделать полноценный роутер с еще одним Ethernet-портом. Именно для этого, мне пришлось реализовать подключение второго Ethernet порта к Raspberry PI.
Конечно можно подключить USB Ethernet-адаптер, и использовать его. Но у меня такого не было, а покупать не очень хотелось. Зато у меня был Ethernet-модуль ENC28J60, который я покупал для подключение arduino к Интернету.
Ethernet-модуль ENC28J60 подключается к Raspberry PI через интерфейс SPI, который доступен и на других версиях raspberry.
Первым делом, и наверное самым сложным, нам нужно подключить модуль к Raspberry
Делается это по такой схеме:
Raspberry PI GPIO | ENC28J60 | ENC28J60 | Raspberry PI GPIO |
none | 5v | GND | none |
GP25 | INT (IRQ) | CLK | none |
GP9 | SO | WOI | none |
GP11 | SCK | SI | GP10 |
none | RST | CS | GP8 |
3V3 | 3.3v | GND | GND |
После этого, нужно программно настроить Raspberry PI
Обращу Ваше внимание: дальнейшую настройку я произвожу через ssh, подключенным к IP стандартного Ethernet порта. Подключаем к модулю ENC28J60 пачкорд, даем питание на Raspberry PI. Для включения SPI интерфейса на Raspberry PI, нужно получить root права, и зайти в конфигурацию Raspberry PI:
sudo su
raspi-config
Включаем интерфейс Interfacing Options->SPI->YES->Finish. После нажатии кнопки Finish, Raspberry запросит перезагрузку – соглашаемся. Теперь нам нужно отредактировать файл /boot/config.txt
nano /boot/config.txt
и добавить строки
dtparam=spi=on
dtoverlay=enc28j60,int_pin=25 где int_pin=25 – номер пина, к которому мы подключили INT пин ENC28J60.
Так же, можно этот файл отредактировать при помощи Вашего ПК. Подключите Flash накопитель к ПК, после чего, Вам будет доступен раздел под именем Boot. Войдите в этот раздел, и здесь Вы увидите файл config.txt. Редактировать его можно любым текстовым редактором. Таким же образом можно включить ssh, без клавиатуры.
Делаем перезагрузкувключение
reboot
После загрузки Raspberry PI, модуль ENC28J60 получит IP адрес. Проверить можно командой:
ifconfig
Для проверки скорости, нужно отключить стандартный Ethernet интерфейс:
ifconfig down
Где — это имя Ethernet интерфейса, определить его можно командой Ifconfig. Будьте внимательны: при отключении интерфейсов – убедитесь, что ssh у Вас работает на другом IP, не на том, что Вы сейчас отключите! Пример:
ifconfig enxb827eb967d94 down
ifconfig eth0 down Теперь можно проверить скорость Интернет соединения. Сделать это можно выполнив установив следующие пакеты:
apt-get install python-pip
pip install speedtest-cli а следующей командой можно тестировать скорость интернет соединения:
speedtest
Для включение интерфейса обратно:
ifconfig enxb827eb967d94 up
ifconfig eth0 up
Тестирование: ifconfig enxb827eb967d94 down speedtest Testing download speed Download: 5.16 Mbit/s Testing upload speed Upload: 3.89 Mbit/s
При скорости стандартного интерфейса:
ifconfig enxb827eb967d94 up speedtest Testing download speed: Download: 68.10 Mbit/s Testing upload speed: Upload: 67.67 Mbit/s
Что это значит в реальной жизни? Это значит, что если Вы захотите передать файл, с ноутбука на Raspberry PI, размером 50Мб, то время передачи приблизительно займет 1 м. 30 сек. Наоборот – приблизительно 2 м 20 сек.
Для передачи потокового видео, этого мало, но для IoT устройств возможно будет достаточно.
Так же, желательно питать модуль дополнительным источником питания, так как Raspberry PI на пине 3.
3V выдает 60 мА, при том, что модуль должен (указано в даташите чипа ENC28J60) употреблять мощность приблизительно 160 мА.
Источник: https://adminblog.net.ua/raspberry/podklyuchenie-vtorogo-ethernet-porta-k-raspberry-pi.html
Подключаем датчики к Raspberry Pi без проводов и с Arduino
В процессе создания умного дома, каждый рано или поздно сталкивается с размещением датчиков, показатели которых нужно выводить на экран, а то и обрабатывать для чего-то более умного.
Большинство датчиков легче всего подключаются к Arduino, за счет наличия библиотек, безгеморройных PWM, ADC и прочих вкусностей.
Но слишком умную логику на Arduino не построишь, и волей-неволей возникает необходимость использования чего-то более быстрого, универсального, и с простой индикациейуправлением.
Например, почти ставший стандартом де-факто, Raspberry Pi.
У него есть HDMIAV выход. Есть флешка, сеть, память, USB и SSH. Все что нам нужно.
Но напрямую датчики к Raspberry Pi подключить весьма непросто, в силу отсутствия большого количества библиотек, примеров, и просто потому что она не совсем к этому приспособлена. Да и держать эти датчики тогда придется рядом, а значит либо Малинке придется жить на балконе, либо датчику влажности воздуха у вас в шкафу.
Разумеется, тянуть два-три провода от датчиков к Малине — тоже не вариант, ибо тогда умный дом станет сложным домом.
Интересно?
Для этих целей была придумана радиосвязь
В качестве самой дешевой, понятной и доступной радиосвязи, я выбрал радиомодуль-трансивер nrf24l01, и вот почему: 1) Дальность. В пределах дома — до ста метров. То что нам подходит. 2) Скорость передачи данных — до 2 Мбит. Хоть потоковое видео передавай.
3) Возможности подключения точка-точка, точки-хаб, хаб-хаб, хаб-точка. 4) Толерантны к 5В, хотя могут принимать и 3.3В. 5) Эти контроллеры имеют свою прошивку, которая позволяет им становиться независимым девайсом.
6) Автоматически шлет идентификатор сигнала, избавляя нас от необходимости заморачиваться с индивидуальной настройкой каналов для каждого трансивера. 7) Дуплекс.
8) Дешевизна. Кстати взял я их не дешево, решил не ждать три недели ради экономии 10 баксов.
Вот так выглядит этот девайс
Топология связи очень проста, дешева и понятна
1) Набор датчиков в какой-либо локации, подключается к Arduino. Таких локаций может быть несколько.
2) Она (Arduino) играет роль предварительного буфера, который собирает данные с датчиков, и комбинирует их для последующей отправки.
Ну и выполняет какую-то базовую логику, например включает на балконе свет по датчику движения (без участия центрального сервера). В общем согласно наши потребностям.
3) Raspberry Pi через такой же самый модуль, принимает радиосигнал.
В интернете очень много примеров связи Arduino-Raspberry Pi, используя эти трансиверы nrf24l01.
Однако почему-то все эти примеры рассматривают Arduino как центральный узел (хаб), а Raspberry Pi как придаток (клиент). И мало что из примеров работоспособно с первого раза.
Методом проб и ошибок, мне удалось сделать обратное — один Raspberry Pi-блок, и несколько узлов с Ардуинами, которые настраиваются абсолютно одинаково, не нуждаются в выборе каналов, частот и прочего. Поменяли циферку в строке — получили новое устройство.
Несколько фоток из центра событий
Малиновый сервер. Не удобно подключаться по сети, WiFi рулит.
Первый подопечный. Arduino Nano с датчиком движения.
Второй подопечный. Arduino Mini и USB-TTL. Где-то там отстает проводок.
Все вместе.
Итак, не буду вдаваться в подробности установок IDE, библиотек, а выложу сразу работающий код для двух устройств.
Arduino-часть
#include
#include // CE,CSN пины
RF24 radio(9,10); // init counter unsigned long count = 0;
int sensor1 = 2; void setup(void)
{ // Инициализируем канал связи и не только. radio.begin(); radio.setPALevel(RF24_PA_MAX); radio.setChannel(0x4c); radio.openWritingPipe(0xF0F0F0F0E1LL); radio.
enableDynamicPayloads(); radio.powerUp(); pinMode(sensor1, INPUT); pinMode(3, OUTPUT);
} void loop(void)
{
char outBuffer[32]= “”;
int pin1 = digitalRead(sensor1); // Следующая строка изменяется по нашему желанию. Я шлю на сервер три значения: ID блока (ардуины), ID пина, и его значение.
Больше ничего изменять не нужно.
String out = “dev1:p1:”+pin1; out.toCharArray(outBuffer, 32); radio.write(outBuffer, 32); delay(50);
// Не знаю почему, но периодически трансивер зависает. Помогает повторная инициализация. radio.begin(); radio.setPALevel(RF24_PA_MAX); radio.setChannel(0x4c); radio.
openWritingPipe(0xF0F0F0F0E1LL); radio.enableDynamicPayloads(); radio.powerUp(); delay(50); // Следующий костыль включает свет по датчику движения на 10 секунд, не замораживая при этом основной цикл loop.
if (pin1=HIGH) { digitalWrite(3, HIGH); count=0; }
count++;
if (count>100)
{ digitalWrite(3, LOW); count=0;
} }
На Малине нам понадобится библиотека, установить которую можно так:
git clone https://github.com/stanleyseow/RF24.git
cd RF24
cd librf24-rpi/librf24
make
sudo make install
C++ код для Raspberry Pi. В инклуде нужно указать путь к файлу хидера
#include
#include
#include “../RF24.h”
#include using namespace std; // spi device, spi speed, ce gpio pin
RF24 radio(“/dev/spidev0.0”,8000000,25); void setup(void)
{ // init radio for reading radio.begin(); radio.enableDynamicPayloads(); radio.setAutoAck(1); radio.setRetries(15,15); radio.setDataRate(RF24_1MBPS); radio.setPALevel(RF24_PA_MAX); radio.setChannel(76); radio.setCRCLength(RF24_CRC_16); radio.openReadingPipe(1,0xF0F0F0F0E1LL); radio.startListening();
} void loop(void)
{
char receivePayload[64]; while (radio.available()) {
uint8_t len = radio.getDynamicPayloadSize();
radio.read(receivePayload, len); // Костыль для создания промежуточного файла.
ofstream out(“/dev/nrf24”);
out
Источник: http://www.pvsm.ru/raspberry-pi/72390
Умный дом на Raspberry Pi и Arduino » Блог Perfecto Web
Давно хотели автоматизировать базовые функции вашего дома, сделать их легкодоступными и управляемыми удаленно? Предлагаем вашему вниманию статью, которая поможет сделать собственный умный дом на базе Raspberry Pi и Arduino.
В данной статье мы расскажем, как создать блок управления, который позволит нам управлять освещением в разных комнатах, измерять температуру и влажность, управлять игровой приставкой PlayStation 4, домофоном, принимать сигналы с датчиков движения.
Все это можно автоматизировать посредством Apple HomeKit.
Что необходимо иметь?
Можно выбрать любую другую версию Raspberry Pi. Наш выбор – Raspberry Pi 3 из-за наличия встроенного WiFi и Bluetooth. Вместо NodeMCU можете взять обычный Arduino Nano и отдельный модуль ESP8266 для WiFi. Далее все это спаять, перепрошить и настроить.
Однако, для задач, которые мы будем выполнять, не нужны лишние затраты времени. В связи с чем, как по цене так и по трудозатратам, разумнее взять NodeMCU или что-то другое, уже готовое. Относительно силового реле – выберите необходимое вам количество.
В нашем случае будут задействованы 3 устройства, в связи с чем мы будем использовать два реле с двумя отдельно-управляемыми отсеками. Ну и само собой, датчик движения вы тоже можете не использовать, если у вас нет в нем необходимости.
Статья расскажет об установке, настройке всех этих компонентов, а каким именно образом использовать – решать вам.
- Переходим на официальный сайт Raspberry Pi, и скачиваем последнюю версию операционной системы Raspbian Jessie Lite. Вы можете использовать обычную версию с desktop-ом, если вдруг она вам будет необходима для каких-то других целей
- Форматируем SD карту FAT32 или FAT.
- Следуем инструкции по установке скачанного образа на Windows, Linux или macOS. Мы воспользовались ApplePi Baker для быстрого монтирования образа из-под Mac OS X в графическом интерфейсе.
- Вставляем карту памяти в Raspberry Pi, подключаем USB клавиатуру и HDMI монитор (можно обычный телевизор). Ждем загрузки и корректируем некоторые настройки по своему усмотрению
- Изменяем пароль по умолчанию в пункте 2 – Change User Password
- Экран загрузки оставляем Scratch, так как графический интерфейс нам не пригодится
- Изменяем имя хоста в Advanced Options > Hostname (по желанию)
- Включаем SSH в Advanced Options > SSH, для удобного управления с другого компьютера
- Все! Нажимаем Finish и ждем перезагрузки
- После загрузки Raspberry открываем файл интерфейсов сети, для этого пишем:
sudo nano /etc/network/interfaces
Находим iface wlan0 inet manual и меняем на iface wlan0 inet static, под ним добавляем статичный локальный адрес. В нашем случае получилось так:
auto wlan0 allow-hotplug wlan0 iface wlan0 inet static address 192.168.1.150 netmask 255.255.255.0 gateway 192.168.1.1wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
address, netmask, gateway – разумеется пишем под настройки вашего роутера.
После введения изменений нажимаем CTRL+X, потом Y, потом ENTER
- Открываем файл супликанта, вводя в командную строку следующее:
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf В открывшемся файле пишем настройки вашего WiFi, как указано ниже. В нашем случае получилось так:ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid=”PerfectoWeb” psk=”AcC3S4R@SBP1″}
Естественно, вместо PerfectoWeb – ваш SSID, а вместо AcC3S4R@SBP1 – ваш пароль.
После введения изменений нажимаем CTRL+X, потом Y, потом ENTER. - Вводим в командную строку: sudo ifdown wlan0
После завершения процесса вводим: sudo ifup wlan0
Перезагружаемся командой: sudo reboot
Wifi настроен и будет автоматически подключаться при старте Raspberry Pi.
- До начала настройки рекомендуем обновиться и проапгрейдится. Для этого вводим в командную строку: sudo apt-get update
sudo apt-get upgrade - Если вдруг, вы используете не Raspbian Jessie, то стоит установить необходимый компилятор. Проверить версию можно по команде:
g++-4.9 -v Если в ответе вы получили gcc version 4.9.2 (Raspbian 4.9.2-10), то все в порядке. Если же у вас старая версия или вовсе не установлен компилятор, то необходимо установить следующей командой:
sudo apt-get install g++
Нам необходимо установить Node.js начиная с версии 4.0. Именно с этой версии Node.js начал поддерживать ARM платформы по умолчанию. Мы установим версию 6.
х, так как на данный момент многие плагины Homebridge не адаптированы под версию 8.х. Для установки последней актуальной версии из линейки 6.х выполняем следующие команду:
curl -sL https://deb.nodesource.com/setup_6.
x | sudo -E bash –
sudo apt-get install -y nodejs Проверяем корректность установленной версии:
nodejs -v
В нашем случае установилась версия v6.11.2
- Изначально необходимо установить Avahi и прочие зависимости, которые необходимы для пакета MDNS из библиотеки HAP-NodeJS.
Выполняем команду: sudo apt-get install avahi-daemon avahi-discover libnss-mdns libavahi-compat-libdnssd-dev - Устанавливаем Homebridge и все зависимости последовательностью следующих команд:
sudo npm install -g –unsafe-perm homebridge hap-nodejs node-gyp cd /usr/lib/node_modules/homebridge/ sudo npm install –unsafe-perm bignum cd /usr/lib/node_modules/hap-nodejs/node_modules/mdns sudo node-gyp BUILDTYPE=Release rebuildПроверяем тестовым запуском:homebridge
В ответ должны получить:[2017-08-15 10:05:15] — [2017-08-15 10:05:15] config.json (/home/pi/.homebridge/config.json) not found. Scan this code with your HomeKit App on your iOS device to pair with Homebridge: ┌────────────┐ │ 031-45-154 │ └────────────┘
[2017-08-15 10:05:15] Homebridge is running on port 44278
Это означает, что все успешно установлено и работает. Вы можете заметить, что Homebridge не смог найти файл конфигурации config.json. Именно его необходимо создать на следующем шаге.
- Создаем файл конфигурации следующими командами:
sudo -i mkdir /root/.homebridge touch /root/.homebridge/config.jsonПример с минимальной конфигурацией:{ “bridge”: { “name”: “RaspberryPi”, “username”: “08:61:6E:E3:2D:7A”, “port”: 51826, “pin”: “031-45-170”} }
Но мы рекомендуем скачать нашу версию, с уже прописанными плагинами, чтобы в конечном итоге у вас получилась такая-же система, как и у нас.
- Далее делаем homebridge демоном и добавляем его в автозагрузку.
Для этого вам необходимо создать файл:
sudo nano /etc/init.d/homebridge
Скачиваем скрипт для автозагрузки и копируем его содержимое в /etc/init.d/homebridge. После сохранения, выполняем следующие командыchmod 755 /etc/init.
d/homebridge
update-rc.d homebridge defaultsТеперь при запуске Raspberry Pi у нас homebridge будет запускаться автоматически от имени пользователя root.
Homebridge, посредством плагинов от сотни разработчиков, может управлять GPIO Raspberry Pi на разном уровне, а также IR, Wifi, Bluetooth устройствами. Для нашей сборки необходимо установить следующие плагины:
- Устанавливаем cmdswitch2 для вкл/выкл устройств скриптом
sudo npm install -g homebridge-cmdswitch2 - Устанавливаем homebridge-cmd_light_control для вкл/выкл и диммирования света
sudo npm install -g homebridge-cmd_light_control - Устанавливаем HttpTemphum для получения данных температуры и влажности через HTTP в формате JSON
sudo npm install -g homebridge-httptemperaturehumidity - Устанавливаем homebridge-hc-sr501 для считывания данных с датчика движения HC-SR501
sudo npm install -g homebridge-hc-sr501 - Устанавливаем ps4-waker для вкл/выкл PlayStation 4
sudo npm install -g ps4-waker
Данный набор плагинов достаточен для нашей сборки, их конфигурации вы можете найти и изменить в config.json, который скачали ранее.
Далее вам необходимо подключить все необходимые устройства в пины Raspberry Pi, как это указано на фотографии.
БУДЬТЕ ОСТОРОЖНЫ при работе с реле и высоким напряжением! Если вы чего-то не знаете точно, лучше не трогать!
После подключения, скатайте архив со скриптами, разархивируйте и загрузите в директорию /home/pi/.
Обратите внимание: все файлы должны иметь права 0777. Для этого вы можете выполнять команду для всех файлов по отдельности следующим образом:
chmod 0777 /home/pi/light_bathroom_off.py
… Выполните данную команду для всех файлов, которые вы скачали и загрузили в директорию /home/pi/
- Включаем PlayStation 4. Переходим в настройки Settings > [Remote Play Connection Settings] > [Add Device]
- В терминале RaspberryPi пишем
ps4-waker - Система попросит вас открыть приложение PS4 на мобильном телефоне и подключиться к ps4-waker.
- Далее вас попросит указать пин-код с экрана монитора, куда подключен PS4. После ввода создастся связь и в RaspberryPi будут сохранены ключи и сертификаты для дальнейшего подключения.
Обратите ванилинам: PlayStation 4 и RaspberryPi должны находиться в одной WiFi сети.
- Подключаем NodeMCU к компьютеру и открываем официальный программатор.
Для NodeMCU необходимо установить драйвер, в нашем случае он построен на чипе CH340G. Для этого необходимо зайти в File > Preferences, далее в поле Additional Boards Manager URLs указать ссылку для скачивания альтернативных плат http://arduino.esp8266.com/stable/package_esp8266com_index.json и нажать OK. После, переходим в раздел Tools > Boards > Boards Manager, в строке поиска пишем esp8266, находим esp8266 by ESP8266 Community и устанавливаем. - Устанавливаем модуль для управления датчиком DHT и модуль Adafruit Sensor master.
- Скачиваем скетч для создания HTTP сервера и вывода данных с датчика температуры и влажности DHT21.
В скетче смените IP адрес и данные для подключения к WiFi на ваши. Заливаем скетч и идем дальше. - Подключаем датчик, как показано на фотографии. В нашем случае подключение идет на ножку D5, GDN и 3.3V.
Обратите внимание Датчик работает именно на 3.3V, при подключении на 5V он может сгореть.
- На данный момент установка статичного IP адреса в NodeMCU работает некорректно. А это очень важно для нас. Мы пошли другим путем. Зарезервировали в роутере IP адрес 192.168.1.190 под MAC адрес нашего NodeMCU. Теперь при подключении к сети, NodeMCU всегда получает IP 192.168.1.190. Этот же адрес нужно указать в /home/pi/.homebridge/config.json на RaspberryPi для модуля HttpTemphum.
- Очищаем кеш аксессуаров и persist на Raspberry Pi следующими командами:
sudo -i rm -r /root/.homebridge/accessories rm -r /root/.homebridge/persistПерезагружаемся:
reboot - Включаем Arduino к USB 5V/1A и ставим в нужное место в комнате.
- Открываем iPad, iPhone и заходим в приложение Home (Дом). Нажимаем добавить аксессуар и ваш планшет или смартфон должен увидеть устройство с названием RaspberryPi. Добавляем его и радуемся!
Вуаля! Теперь мы можем управлять светом на кухне, в ванной, управлять PlayStation 4, получать данные от датчика движения, узнавать температуру и влажность. Мы также можем автоматизировать некоторые действия в Apple Home.
Например, чтобы все устройства автоматически выключались, когда вы уходите из дома. Или, чтобы при достижении определенной температуры, реле включало не свет, а вентилятор.
Надеемся, данная статья была полезной для вас и на основе нее вы сможете автоматизировать и другие, необходимые вам устройства.
Источник: https://perfecto-web.pro/ru/blog/hardware/smart-home-with-raspberrypi-arduino-homebridge.html
Сравнение Raspberry Pi и Arduino: что выбрать?
Raspberry Pi и Arduino – два популярных продукта на рынке электроники, ориентированных на IoT. Поэтому многие новички в соответствующей области задают вопрос: “какое решение выбрать?”. Ответ на него довольно прост, но несколько обширен.
Содержание
Raspberry Pi и Arduino – два популярных продукта на рынке электроники, ориентированных на IoT (интернет вещей). Поэтому многие новички в соответствующей области задают вопрос: «какое решение выбрать?». Ответ на него довольно прост, но несколько обширен.
Raspberry Pi и Arduino – это не одно и то же
Первое, о чем необходимо сказать – Arduino и Raspberry Pi – это не одно и то же. Они похожи только внешне, так как представляют собой небольшие одноплатные компьютеры (почти размером с банковскую карту).
Но вот начинка у них сильно отличается. Так, процессор в “Малине” в 40 раз более быстрый, чем в Arduino. Однако разница в объеме оперативной памяти куда существеннее – более, чем в 100 тысяч раз – 1 гигабайт против всего 32 килобайт.
Но не стоит сразу же говорить, что Ардуино – это бесполезная маломощная плата, которая не стоит своих денег. Это не так. Да, если поставить Arduino VS Raspberry Pi, то последняя выйдет далеко вперед по производительности. Но у первой есть несколько преимуществ.
Первое: Ардуино – это одноплатник, который не нагружен выполнением кода операционной системы. Данный компьютер обрабатывает только одну задачу – на нём они выполняются в режиме реального времени. Кроме этого, соответствующая плата имеет сравнительно низкое энергопотребление.
Но главное достоинство Arduino заключается в ее простоте. Общаться с этим компьютером очень легко – необходимо разобраться только в одном – IDE. В то же время на Raspberry нужно изучать операционную систему, а также устанавливать различные библиотеки.
Raspberry или Arduino – что выбрать?
Из текста выше полностью понятно, что соответствующие одноплатники созданы для решения разных задач. Хотя, конечно, Raspberry может выполнять специфические функции Arduino, но наоборот это работать не будет.
Из этого следует, что “Малина” – универсальный компьютер, тогда как Ардуино – специализированный, но тоже рассчитанный на новичков в робототехнике и IoT.
То есть человек, который хочет начать работать с одноплатниками, но пока не имеет четких целей, может выбрать Raspberry Pi. Даже в том случае, если ему не понравится соответствующая сфера деятельности, он не потеряет деньги, а превратит “Малину” в:
- мультимедийный центр;
- игровую консоль;
- рабочий компьютер и т. д.
Однако если у него есть цель реализовать какой-то конкретный проект, например, сделать машинку с удаленным управлением, квадрокоптер, систему умного дома и т. д., то ему рекомендуется обратить внимание именно на Ардуино. Также к этому одноплатнику могут приглядеться те, у кого уже есть Raspberry, и их увлекает работа с ним.
Стоит ли покупать Arduino только из-за стоимости
Ардуино – сравнительно более дешевый компьютер, чем “Малина”. Так, в российских магазинах его возможно купить более, чем в полтора раза дешевле, нежели Raspberry. С Китая же можно и вовсе заказать за 8-10 долларов, тогда как “Малина” обходится минимум в $38.
Однако руководствоваться только одной выгодой не следует. Если нет цели сделать какой-то конкретный проект, то соответствующая плата будет бесполезной. Также для его реализации обязательно понадобятся дополнительные модули, некоторые из которых стоят дороже, чем сам одноплатник.
Подключение Arduino к Raspberry Pi
Эти два одноплатника могут работать совместно и эту возможность часто используют. Например, их интеграция позволяет сделать систему, в которой “Малина” отвечает за обработку большого количества данных, а Ардуино просто управляет датчиками. Хотя такой конструкции возможно найти и множество других применений.
Самый простой способ выполнить подключение Arduino к Raspberry – это соединить их по USB (USB – MicroUSB). “Малина” должна обнаружить устройство. Потом с ней можно взаимодействовать посредством PySerial – специальной Python-библиотеки.
Наличие документации
Мейкерство на Arduino и Raspberry Pi – дело не очень сложное. Во многом это возможно благодаря активному и дружелюбному сообществу. Владельцы и первой, и второй плат не испытывают нехватки информации.
К текущему моменту существует обширная документация (в том числе на русском языке) и даже написаны целые книги по работе с соответствующими компьютерами.
А когда какой-то информации не удается найти, всегда можно задать вопрос на специализированном форуме или IRC-канале.
Человеку, который хочет заняться мейкерством, необходимо усвоить одну вещь – Raspberry и Arduino – это не конкуренты. Они ориентированы на выполнение разных задач и при этом могут дополнять друг друга. Так, многие из тех, кто всерьез увлекся одноплатниками в дополнение к своему Raspberry покупают еще и Arduino (и, возможно, не один).
Источник: https://myraspberry.ru/sravnenie-raspberry-pi-i-arduino-chto-vyibrat.html
Проекты Raspberry Pi на Python с GPIO
В этой статье мы поговорим о том, как подключать к Raspberry Pi датчики и другие внешние устройства через GPIO порты платы. Для работы будем использовать Python и библиотеки. Если вы новичок в работе с распбери, рекомендуем прочитать статью об установке Python и библиотек для Raspberry Pi.
Подключение внешних устройств к Raspberry Pi
Отличие Raspberry Pi от Arduino
Среди любителей радиотехники и электроники каждый слышал о существовании таких устройств как Arduino и Raspberry Pi. Обе платы используются для решения схожих задач, оба прекрасно подходят для начинающих. Но по сравнению с Ардуино Raspberry – это многофункциональный компьютер, на котором может запускаться операционная система.
Из основных отличий можно выделить тактовую частоту – Raspberry работает в 40 раз быстрее Ардуино, и объем оперативной памяти – у Raspberry памяти больше примерно в 128000 раз. За счет простоты управления и использования разрабатывать аппаратные проекты на Ардуино предпочтительнее.
Ардуино может работать с любыми датчиками или чипами, а Raspberry Pi не такая гибкая, для работы с датчиками требуются дополнительные аппаратные устройства.
Raspberry Pi очень требовательна к питанию, напряжение должно быть строго 5 В на входе, в то время как для ардуино рекомендуемое питание 7-12 В, которое стабилизируется до 5 В.
Важное отличие заключается в среде, в которой пишется программа. С Arduino IDE работать намного проще, чем с Linux. Установка библиотек для написания программы требуется для обеих систем, но код на Ардуино будет написан проще и короче.
Raspberry Pi возможно использовать в режиме многозадачности, как обычный компьютер. Одновременно может работать несколько программ в фоновом режиме.
Для расширения возможностей можно совместно использовать обе платы. Для управления датчиками и сенсорами использовать Ардуино, а сложные вычислительные задачи оставить для Raspberry Pi.
Описание GPIO
Количество портов в более старых и новых моделях Raspberry Pi отличается –model A и model B оснащены 26 выводами общего назначения GPIO, в следующих версиях количество выводов увеличено до 40.
Существует несколько видов обозначений выводов:
- BCM – нумеруются выходы микропроцессора Broadcom. Используются при работе со специальными пакетами Rpi.GPIO. В большом количестве проектов используется именно эта нумерация.
- WiringPi – нумеруются контакты для пакета Wiring Pi. Это библиотека, похожая на библиотеки для Ардуино, для работы с GPIO контактами.
- Обычная цифровая нумерация выходов на самой плате.
Расположение контактов изображено на рисунке. На картинке для удобства последние 14 контактов отделены – это и есть новые выходы, которые были добавлены в новых версиях платы.
Описание контактов GPIO
Номер вывода | BCM | WiringPi | Описание контакта |
1 | 3v3 | Питающий контакт на 3,3В | |
2 | 5v | Питающий контакт на 5 В | |
3 | BCM2 | 8 | SDA |
4 | 5v | Питающий контакт на 5 В | |
5 | BCM3 | 9 | SCL |
6 | GND | Земля | |
7 | BCM4 | 7 | GPCLK0 |
8 | BCM14 | 15 | TXD – отвечает за передачу данных |
9 | GND | Земля | |
10 | BCM15 | 16 | RXD – отвечает за прием данных |
11 | BCM17 | Вывод общего назначения | |
12 | BCM18 | 1 | PCM_C – используется в сочетании с ШИМ-методом. |
13 | BCM27 | 2 | Контакт общего назначения |
14 | GND | Земля | |
15 | BCM22 | 3 | Контакт общего назначения |
16 | BCM23 | 4 | Контакт общего назначения |
17 | 3V3 | Питающее напряжение 3,3В | |
18 | BCM24 | 5 | Контакт общего назначения |
19 | BCM10 | 12 | MOSI |
20 | GND | Земля | |
21 | BCM9 | 13 | MISO |
22 | BCM25 | 6 | Контакт общего назначения |
23 | BCM11 | 14 | SCLK |
24 | BCM8 | 10 | CS0 |
25 | GND | Земля | |
26 | BCM7 | 11 | CS1 |
27 | BCM0 | 30 | ID_SD |
28 | BCM1 | 31 | ID_SD |
29 | BCM5 | 21 | Контакт общего назначения |
30 | GND | Земля | |
31 | BCM6 | 22 | Контакт общего назначения |
32 | BCM12 | 26 | Контакт общего назначения |
33 | BCM13 | 23 | Контакт общего назначения |
34 | GND | Земля | |
35 | BCM19 | 24 | MISO |
36 | BCM16 | 27 | Контакт общего назначения |
37 | BCM26 | 25 | Контакт общего назначения |
38 | BCM20 | 28 | MOSI |
39 | GND | Земля | |
40 | BCM21 | 29 | SCLK |
Выводы земля, напряжение питания и другие аналогичные можно использовать любые, которые будут удобнее в конкретном проекте. Важно следить за тем, чтобы напряжение на GPIO было 3,3В, иначе контакт может быть вывеен из строя.
Среди выводов общего назначения имеются UART-контакты (на восьмом и десятом контактах). Они позволяют обеспечить взаимодействие Ардуино и Raspberry Pi. Также 4 вывода поддерживают I2C, главной задачей которых является коммуникация с периферией. Для верификации в коде нужно добавить строки
sudo apt-get install i2c-tools
sudo i2cdetect -y 1
Для осуществления доступа к I2C нужно подключить библиотеку smbus.
SPIподдерживают 11 выводов общего назначения. С помощью этого интерфейса можно настроить подключение нескольких устройств с помощью одной группы контактов.
Пример проекта: мигание светодиодов
Для работы понадобятся плата Raspberry Pi, светодиод, резистор на 200 Ом и соединительные провода. Анод светодиода (длинная ножка) нужно подключить через резистор к одному из цифровых выводов, например GPIO24, катод (короткая ножка) – к земле. Макет подключения представлен на рисунке.
Резистор в данной схеме нужен для того, чтобы уберечь светодиод от перегорания. Выбрать правильный номинал можно пользуясь законом Ома R=U/I. Плата работает от напряжения 3,3В.
Номинал, который будет получен по формуле – минимальный, можно выбирать сопротивление больше, но в этом случае яркость светодиода будет несколько ниже.
Теперь нужно написать программу. Код будет написан в установленной версии Python 2. Для этого нужно открыть среду Python 2 (IDLE) и нажать «новый файл».
В окно редактора нужно написать скетч, который заставит светодиод загореться на 10 секунд и отключит его. В первую очередь нужно выбрать нумерацию выходов. Как говорилось выше, существует несколько типов нумерации. В данном случае будет использоваться нумерация BCM.
Сам код выглядит следующим образом:
from RPi import GPIO from time import sleep //первые 2 строки включают библиотеки для совместной работы с GPIO и sleep GPIO.setmode(GPIO.BCM) //этой строкой выбирается нумерация контактов GPIO.setup(24, GPIO.OUT) //чтобы управлять светодиодом или другим устройством, нужно задать OUT. Для того чтобы считывать сигнал сенсора, нужно ввести IN. GPIO.output(24, True) //подача истины на контакты sleep(10) //светодиод загорается на 10 секунд, ожидание GPIO.output(24, False) GPIO.cleanup() //сброс всех настроек портов, чтобы они не мешали следующей программе.
Нужно нажать запуск программы с помощью F5 или меню Run/Run Module.
Код можно немного изменить, чтобы светодиод включался и выключался с определенной частотой. Для этого нужно добавить оператор while вместо строк GPIO.output и Sleep.В цикле нужно задать частоту, с которой будет мигать светодиод. В данном случае он будет мигать раз в 1 секунду.
while True: GPIO.output(24, True) sleep(1) GPIO.output(24, False) sleep(1)
Большим недостатком такой программы будет то, что она будет повторяться бесконечно и остановить штатным методом ее будет невозможно. Для этого нужно ввести дополнительно конструкцию, прерывающую работу при наборе на клавиатуре комбинации Ctrl+C.
try: while True: GPIO.output(24, True) sleep(0.5) GPIO.output(24, False) sleep(0.5) except KeyboardInterrupt: print 'program stop'
Программу нужно сохранить, нажав ctrl+S. Затем нужно нажать F5, светодиод начнет мигать с периодичностью раз в секунду. Чтобы остановить выполнение программы, нужно нажать ctrl+C.
Выводы
В этой статье мы приступили к новой большой теме и сделали первые шаги в программировании на Python под Raspberry с использование GPIO. Возможности микроконтроллера существенно превышают привычный Arduino, поэтому для создания по-настоящему умных устройств придется осваиваться с новыми инструментами для работы с периферией. В дальнейших статьях мы продолжим наши эксперименты.
Источник: https://ArduinoMaster.ru/raspberry-pi/proekty-raspberry-pi-na-python-s-gpio/
Делаем модуль расширения для Raspberry Pi с Arduino на борту
У нас в хакспейсе есть много разных Raspberry Pi, с помощью которых мы учим детей программировать на python, делать роботов и разные полезные гаджеты. Разумеется, все то же самое делаем и на Arduino.
За три года жизни душа в душу с этими крайне отличающимися платформами, у нас появилось несколько идей о том, как правильнее сделать учебного робота, учитывая плюсы и минусы каждой железки. Все эти мысли материализовались в новом устройство, о котором речь и пойдет далее.
По сути, мы спроектировали Arduino-совместимый модуль расширения для RPi, который содержит драйвер двигателя и стабилизатор питания.
Понятно, что этот модуль является самодостаточным контроллером для учебного робота, но именно сэндвич RPi+Arduino демонстрирует идеологически правильный подход к созданию роботов. Как эта штука выглядит, какими характеристиками обладает, и где её можно применить читаем далее.
Немного истории
Уже прошло 4 года с момента выпуска в серию Raspberry Pi Model B. В свое время, именно шумиха вокруг RPi отчасти сподвигла нас на создание нашего хакспейса.
Ведь первое, что мы начали делать — учить детей робототехнике на RPi. Уже после первых уроков со старшеклассниками на базе Уральской компьютерной школы имени Н.Н.
Красовского, мы задумались о своей мастерской-лаборатории, открытой для всех страждущих.
Наши уроки сложились в базовый курс, который в последствии был адаптирован к Arduino. Продолжением этого курса должны были стать конкретные проекты, в которых ребята смогли бы применить полученные знания о работе микроконтроллеров и разных полезных компонентов. Целый класс таких учебных проектов мы посвятили созданию мобильных роботов, как на базе Raspberry Pi, так и на Arduino.
Первый наш робот на базе RPi был создан именно как пособие для работы со школьниками. Это был двухколесный робот, на котором ребята отрабатывали работу с двигателями и разного рода датчиками, попутно готовясь к соревнованиям.
В качестве шасси использовался мотор-редуктор фирмы tamiya. Драйвером двигателей служил drv8833 от TI. В варианте для робота LineFollower стояло два самодельных датчика отражения.
На верхней палубе робота была установлена беспаечная макетная плата на 400 точек.
Робот показал себя отлично, так что с течением времени платформа примеряла разный обвес. Кроме LineFollower-а, который мы кстати называем следопытом на наш лад, робот носил оптические датчики отражения, ультразвуковые дальномеры, рисовал фломастером на ватмане, наконец, управлялся через wifi, передавая изображение с веб-камеры.
Со временем пришло понимание того, что мотор-редуктор был выбран не самый популярный, да еще и очень шумный. Корпус робота не вмещал всех хотелок, и не был совместим с распространенными конструкторами.
А самое главное, появилась идея сделать модуль расширения для RPi, который бы избавил робота от лишних «рутинных» коммуникаций и устройств. Так начался проект колесного робота под кодовым названием MR-K-1, а вслед за ним и MR-K-2.
С самого начала мы стали предусматривать посадочные отверстия под обе платформы, и ниже представлена модель робота с Arduino на борту.
Это модификация для битвы, на которой школьники управляя роботом по bluetooth стремятся лопнуть воздушные шарики, закрепленные на вражеской машине. Раму увеличили, мотор-редуктор заменили на распространенный китайский двигатель желтого цвета (а иногда белого). Корпус адаптировали под конструктор multiplo, так что теперь он покрылся квадратными отверстиями. Всё это заняло несколько недель. А вот работа над модулем расширения немного затянулась. И проблема была не столько в сложности реализации, сколько в нехватки времени, усугубленной перфекционизмом
Источник: https://se7en.ws/delaem-modul-rasshireniya-dlya-raspberry-pi-s-arduino-na/
Подключение Arduino к Raspberry Pi
Дата публикации: 4.09.2015
Во многих сценариях интернета вещей бывает полезно иметь один достаточно мощный встраиваемый компьютер (в роли которого может выступать Raspberry Pi), который может связываться с множеством расположенных в разных местах сенсоров, управляемых простыми микроконтроллерами семейства Arduino. При этом можности Raspberry Pi хватает, чтобы передавать данные по защищенным каналам HTTPS в облако, а также чтобы осуществлять взаимодействие с пользователем посредством развитого интерфейса (например, при работе под управлением Windows 10).
Для соединения Arduino с Raspberry Pi существует несколько сценариев подключения:
- Использование явного последовательного канала передачи данных. При этом возникают сложности, связанные с разностью уровней питания: Raspberry Pi работает на напряжении 3.3В, в то время как Arduino использует 5 вольт. При этом для обеспечения безопасного соединения рекомендуется использовать специальные преобразователи уровня.
- Использование последовательной шины I2C, что позволяет подключать к одной Raspberry Pi до 128 устройств Arduino в режиме slave, при этом такое подключение также не требует преобразователей уровня.
- Подключение по USB является пожалуй самым простым способом, поскольку для этого достаточно всего лишь воткнуть Arduino через стандартный кабель в USB-разъем Raspberry Pi. Именно этот способ мы и рассмотрим.
В качестве примера рассмотрим простейший датчик температуры и давления BMP-180, подключенный к Arduino Uno по стандартной схеме. После этого контроллер Arduino включается в USB-разъем Raspberry Pi, а сам Raspberry Pi затем подключается обычным образом к питанию, монитору и т.д.
При таком подключении общение Arduino и Raspberry происходит по последовательному порту. Предварительно (до подключения) на Arduino необходимо залить требуемый скетч – в нашем случае это простая программа, считывающая значение давления и температуры с датчика и печатающая их в виде текста в последовательный канал (температура предваряется символом Т, а давление – P):
#include
#include BMP180 barometer; void setup()
{ Serial.begin(9600); Wire.begin(); barometer = BMP180(); if(barometer.EnsureConnected()) { barometer.SoftReset(); barometer.Initialize(); } else { Serial.println(“E”); }
} void loop()
{ if(barometer.IsConnected) { long pres = barometer.GetPressure(); float temp = barometer.GetTemperature(); Serial.print(“P”); Serial.println(pres); Serial.print(“T”); Serial.println(temp); delay(1000); }
}
Проверим работоспособность скетча в Arduino IDE, открыв монитор последовательного порта – мы должны увидеть появляющиеся значения температуры и давления. Обратите внимание на скорость – в программе задана скорость в 9600 бод, такие же установки должны быть и у монитора последовательного порта.
Теперь загрузим Raspberry Pi – в моем примере я использую Pidora в качестве базовой операционной системы и классическую модель Rapsberry Pi, хотя с таким же успехом можно использовать Raspberry Pi 2 и Windows 10.
Первым делом нужно определить, какой последовательный порт будет отвечать за общение с Arduino-контроллером.
Проще всего это сделать следующим образом: при выключенной плате Arduino смотрим все доступные последовательные терминалы (ls /dev/tty*), после чего включаем плату в USB-порт, и через некоторое время снова смотрим список терминалов.
То устройство, которое появилось в списке, и будет требуемым портом. В моём случае это был /dev/ttyUSB0, но в зависимости от номера порта, используемого дистрибутива системы и других факторов это имя может сильно отличаться.
Теперь мы можем использовать любые средства общения с последовательным портом для того, чтобы принять значения от датчика, передаваемые Arduino. Чаще всего удобным оказывается использовать Python и библиотеку serial. Например, следующий простой скрипт, набранный прямо в REPL, будет отображать на экране все данные, приходящие в последовательный порт:
import serial
ser = serial.Serial(“/dev/ttyUSB0”,9600)
while 1: ser.readline()
Ниже показано, как этот скрипт выполняется в окне терминала на Raspberry Pi:
После этого получения данных в требуемом виде с последующей отправкой их в облако или сохранением в локальной базе данных является делом техники.
Источник: https://msdn.microsoft.com/ru-ru/mt459277.aspx
Raspberry Pi and Arduino
Note. There is now a followup to this post here.
The Raspberry Pi is creating quite a storm of interest. I have just got mine and one of the first things that I wanted to try was to get it talking to an Arduino over USB using Python.
.. and you know what? It proved to be a lot easier than I expected. This is mainly because, after all, despite its diminutive price tag, the Pi is just a Linux box. I got communication working both ways, with the Arduino sending 'Hello Pi' to the Pi and at the same time, testing for a digit coming in. When it receives a digit, it flashes the number of times indicated by the digit.
Arduino
Let's start with the Arduino end. I used an Arduino Uno and Arduino software version 1.0. I haven't tried an older board, but I suspect the FTDI generation Arduinos before the Uno may have trouble with USB. Here is the sketch – paste it into a new Arduino IDE window and load it up onto your Arduino using your regular computer.
const int ledPin = 13;
void setup()
{
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.println(“Hello Pi”);
if (Serial.available())
{
flash(Serial.read() – '0');
}
delay(1000);
}
void flash(int n)
{
for (int i = 0; i < n; i++)
{
digitalWrite(ledPin, HIGH);
delay(100);
digitalWrite(ledPin, LOW);
delay(100);
}
}
Raspberry Pi
There is a Python library for serial communications called 'pySerial' which has history with Arduino. So, I stood on the shoulders of giants and adapted the instructions found here.
Step 1. If you are not reading this page on your Pi, then switch now, so you can copy and paste.
Step 2. Browse to here and download pyserial-2.5.tar.gz (106.3 kB) and save it somewhere convenient. I saved it to the 'other' folder on the Desktop.
Step 3. This is a gziped tar file. Which needs unzipping and untaring. To unzip it open a Terminal, which you will find from the 'start menu' under 'accessories'. Now paste the following commands into it.
cd /home/pi/Desktop/other
gunzip pyserial-2.5.tar.gz
tar – xvf pyserial-2.5.tar Step 4. Install pySerial, by typing these lines in your terminal window:
cd pyserial-2.5
sudo python setup.py install
Step 5. Run Python 2. You will find this from the menu under Programming – Use Python 2 not 3. Thats it! Now we just need to write some Python to access the Serial port. So type the commands shown in the transcript below.You type the parts after >>>
import serial
ser = serial.Serial('/dev/ttyACM0', 9600) Note that the second argument here (9600) is the baud rate and should match whatever you put in your Arduino sketch. /dev/ttyACM0 is the name for the USB interface to the Uno, at least it was for my Uno. The way to discover the port name is to run the following command in the terminal without the Uno plugged in.
ls /dev/tty*
Then plug in your Arduio and run the command again. If there is a new name, then this is the name of your port. Now lets start a loop listening for messages from the Arduino.
while 1 :
ser.readline() You will need two hit enter twice after you type the second line. Messages should now start to appear! You can see in the Blue writing where the Arduino is talking to the Pi. Then some error trace as you press ctrl-C to interrupt the messages coming from the Arduino. When you type
ser.write('5')
you should see the LED on the Arduino flash 5 times. There are many possibilities here, we could put a motor shield or LCD shield onto the Arduino and control it from your Pi.
About the Author
These are my books. Click on the image below to find out more about them.
Источник: http://www.doctormonk.com/2012/04/raspberry-pi-and-arduino.html