27.09.2013 Wheezy (Debian 7, Версии ядра 3.6, 3.10, 3.12, 3.18)
28.09.2015 Jessie (Debian 8 )
17.08.2017 Stretch (Debian 9)
24.06.2019 Buster (Debian 10)
03.12.2021 Bullseye (Debian 11)
10.10.2023 Bookworm (Debian 12)
01.10.2025 Trixie (Debian 13)

pi
Сообщения
-
Версии Raspbian -
XBMC просто и легкоСовсем немного терпения, чуть чуть интернета и главное трезвый ум Я надеюсь кроме самой малинки у вас уже есть всё необходимое: картридер, SD карта памяти или микро SD с адаптером, питальник 5В желательно помощнее (по моему личному опыту не менее 1000 мА), HDMI кабель, телевизор с ПДУ и HDMI входом.
Необходимо так же иметь права администратора ОС вашего компьютера. Сначала скачиваем образ диска ___ GB Image под свою карту памяти вот отсюда например: http://sparky0815.de/openelec-download-images-fat-files/, оттуда же скачиваем обновления FAT-Files (Update), после распаковываем во временную папку образ из архива и обновления. Дальше необходимо записать образ системы на карту памяти, делаем это с помощью утилиты Win32DiskImager , дальше копируем с заменой в уже созданную систему все обновления из скачанного FAT`a:
ВСЁ!!!
Подключаем ваш Raspberry к телевизору к Ethernet кабелю, питанию и радуемсяНастройки XBMC и юзер мануалы в большом количестве представлены в интернете
PS для воспроизводства сетевого видеоконтента требуется license key http://www.raspberrypi.com/license-keys/
-
Archlinux Yota - routerCтолкнутся с archlunux при работе с raspberry PI.
Пришлось устанавливать его так как freebsd очень сырой для RPI. Вот мои действия что-бы получить и раздать интернет.Логинимся на свежезалитый archlinux -> Подключаем Yota LTE модем.
Прописываем ip на локальный интерфейс
levantuev #> ifconfig eth0 172.16.10.1/24
Получаем интернет
levantuev #> ifconfig eth1 192.168.0.2/24 levantuev #> route add default gw 192.168.0.1
Обновляем пакеты и устанавливаем firewall. Тянет около 300мб.
levantuev #> pacman -Syu levantuev #> pacman -S iptables
Получаем базовые файлы так как они отсутствуют
levantuev #> pacman -Syu initscripts
Раздаем интернет локальной подсети
levantuev #> echo 1 > /proc/sys/net/ipv4/ip_forward levantuev #> iptables -t nat -A POSTROUTING -o eth1 -s 172.16.10.0/24 -j MASQUERADE levantuev #> service iptables save levantuev #> service iptables restar
Все вопросы пишите на pavel@levantuev.com
-
minecraft pi eidtion-------для чайниковВсем привет! Недавно я узнал что minecraft пришел на raspberry pi, я скачал и установил его...
Для его установки нужно иметь интернет на RPI, права администратора на rpi и головуустановка:
- 1)перейти по сылке http://depositfiles.com/files/k5sr8722r на своем RPI и скачать файл.
- 2)открыть его в программе xarhiver.
- 3)выбрать папку mcpi и щелкнуть правой кнопкой мыши.
- 4)нажать export.
- 5)экспортировать на раб.cтол.
- 6)на рабочем столе появиться папка mcpi (ее открывать не нужно!!).
- 7)открыть LXTerminal.
- 8)ввести cd /home/pi/Desktop/mcpi.
- 9)ввести ./minecraft-pi .
- 10)готово играйте на здоровье
есть 1 минус версия 1.0.0
-
установка русской раскладкиВсем привет сегодя я хотел рассазать о установке русскoй раскладки на малине.
есл вы знаете как это делать то не читайте,
прошу не судите строго я только первый год освaеваю его.
для настройки нужно:- 1.RPI
- 2.права админа
- 3.клавиатура и мышь
----------настройка---------
ВНИМАНИЕ! ПЕРЕД УСТАНОВКОЙ ДОЛЖНА БЫТЬ ЛАТИНСКАЯ РАСКЛАДКА- Пишем в терминал
sudo raspi-config
- Выбираем configure_keyboard и жмем enter
- Выбираем модель вашей клавиатуры (я выбрал BTC 5090
- Указываем раскладу клавиатуры русская
- Выбираем удобное сочетание для смены раскладки клавиатуры
- Жмем обе клавиши с логотипом
- Выбираем клавишу которую вы хотите использовать как AltGr
- Выбираем составную клавишу
- И жмем да
- Жмем tab, выбираем finish.
- Перегружаем пирог
теперь нажимаем сочитание
которое поставил
и радуйся!
--------ОШИБКА ПРИ УСТАНОВКЕ------
Один раз я gытался поставить русский язык не посоветовавшись с инетом и запортил себе систему(квадратики вместо букв и невозможно войти)
чтобы этого не допустить проверяйте каждое своё действие и подумайте что может случится !
я исправил проблему подключившись по ssh и поменял raspi-config
с наилучшими пожеланиями!
Bаш Серега -
Микрофон и распознавание речи на raspberry piРанее было описано как настроить синтезаторы речи festival и espeak на rasberry pi. http://raspberrypi.ru/blog/readblog/153.html
Сейчас я хочу описать, как преобразовать речь человека , а затем обработать полученные данные.
Хочу сразу заметить , что ни одно готовое решение для Linux найденное в интернете у меня сразу не заработало, все настраивалось экспериментально. Как известно, raspberry pi не имеет входа для микрофона, но это не проблема поскольку можно подключить usb микрофон. Как всегда в магазине микрофона не оказалось и я взял usb камеру со встроенным микрофоном Microsoft VX-800, которая входит в список поддерживаемых устройств на сайте производителя. Начинаем подключать. Для начала надо установить некоторые пакеты, делаем:
apt-get install v4l-utils sox alsa-tools alsa-oss flac
Запускаем :
#lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 004: ID 045e:0766 Microsoft Corp. Bus 001 Device 005: ID 2341:0043 Arduino SA Uno R3 (CDC ACM)
Наша камера: Bus 001 Device 004: ID 045e:0766 Microsoft Corp.
Камеру увидели, хорошо.
v4l2-ctl --all Driver Info (not using libv4l2): Driver name : uvcvideo Card type : Microsoft LifeCam VX-800 Bus info : usb-bcm2708_usb-1.2 Driver version: 3.2.27 Capabilities : 0x04000001 Width/Height : 640/480 Pixel Format : 'YUYV' Field : None Bytes per Line: 1280 Size Image : 614400 Colorspace : Unknown (00000000) Crop Capability Video Capture: Bounds : Left 0, Top 0, Width 640, Height 480 Default : Left 0, Top 0, Width 640, Height 480 Pixel Aspect: 1/1 Video input : 0 (Camera 1: ok) Streaming Parameters Video Capture: Capabilities : timeperframe Frames per second: 30.000 (30/1) Read buffers : 0
Ну здесь вроде бы все про видео камеру, много всякой информации. Проверяю номер устройства для записи.
arecord -l **** List of CAPTURE Hardware Devices **** card 1: VX800 [Microsoft LifeCam VX-800], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
Ну вроде наш микрофон 1,0
Еще можно посмотреть
#cat /proc/asound/cards 0 [ALSA ]: BRCM bcm2835 ALSbcm2835 ALSA - bcm2835 ALSA bcm2835 ALSA 1 [VX800 ]: USB-Audio - Microsoft LifeCam VX-800 Microsoft Microsoft LifeCam VX-800 at usb-bcm2708_usb-1.2, high speed
И вот теперь начинаются грабли, что хорошо работало в других версиях Linux на РС здесь никак не хочет.
В пакет Sox входять утилиты sox, play и rec, так вот если sox и play запустить получилось, то rec ни в какую микрофон видеть не хочет. Запуск play.
#export AUDIODEV="hw:0" #play test.wav
вот так работает.
Откровенно говоря и не надо , у нас есть arecord. Делаем запись с указанными параметрами, почему именно так - не знаю , но так любит googl.
arecord -B --buffer-time=1000000 -f dat -r 16000 -d 4 -D plughw:1,0 send.wav
Теперь расшифрую:
- -B --buffer-time=1000000 - какой то буфер , о нем описано в --help, если его не ставить то будет ошибка overrun!!!(...) и google не распознает, причем это происходит не всегда, но хочется иметь какую то стабильность.
- -f dat - без этой команды пишет 8 бит запись ,а с этой 16 бит
- -r -- sample rate 16000 опять же google любит
- -d 4 -- длительность записи 4 сек , мне хватает чтобы сказать фразу из двух трех слов
- -D plughw:1,0 -- а это , что называется за что боролись, наш микрофон.
- send.wav - файл куда пишем.
Если все правильно , то при запуске на камере загорается светодиод на 4 сек и в этот момент надо что то сказать.
Проверка:
aplay send.wav
Теперь надо преобразовать в формат flac , так любит google, делаем:
flac -f -s send.wav -o send.flac
Вот теперь у нас два файла send.flac и send.wav , .wav можно удалить.
Теперь с помощью PHP надо отослать этот файл на сервер google для расшифровки. Просто я больше PHP предпочитаю.
$file_to_upload = array('myfile'=>'@./send.flac'); $ch = curl_init(); // в конце строки надо указать lang=ru-RU или en-US для английского curl_setopt($ch, CURLOPT_URL,"https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU"); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_TIMEOUT,15); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: audio/x-flac; rate=16000")); curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); echo $result."\n";
В ответ получим много всякой информации, в том числе и необходимую нам расшифровку. Ниже метод как пропарсить строку:
if(strlen($result) > 3 ) // if coonect and get response { $fm_google=substr($result,strpos($result,"utterance")+12,strpos($result,"confidence")-27 - strpos($result,"utterance")+12); }
кто-то может использовать другой метод ,более эффективный, я буду только рад за подсказку. Теперь полученный ответ кажды может использовать на свое усмотрение , я например использую базу MySQL с набором вопросов и ответов.
Самый простой вариант в РНР:
system("espeak -ven -s 160 -g 5 \"".$fm_google."\" 2> /dev/null &");
а можно какой то скрипт запустить. Пример. Запускаем скрипт и говорим "сколько время".
#!/usr/bin/php5 system("arecord -B --buffer-time=1000000 -f dat -r 16000 -d 4 -D plughw:1,0 send.wav"); system("flac -f -s send.wav -o send.flac"); $file_to_upload = array('myfile'=>'@./send.flac'); $ch = curl_init(); // в конце строки надо указать lang=ru-RU или en-US для английского curl_setopt($ch, CURLOPT_URL,"https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ru-RU"); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_TIMEOUT,15); curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: audio/x-flac; rate=16000")); curl_setopt($ch, CURLOPT_POSTFIELDS, $file_to_upload); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $result=curl_exec ($ch); if(strlen($result) > 3 ) // if coonect and get response { $fm_google=substr($result,strpos($result,"utterance")+12,strpos($result,"confidence")-27 - strpos($result,"utterance")+12); } if($fm_google=="сколько время") { // указываем скрипт , сообщающий время system("./gettime.sh"); }
У меня эта связка работает совместно с Arduino UNO и подключенным к нему sound sensor. Происходит все так:
-
Говорю медленно "Артур" (типа R2 по англиски) , запускается скрипт записи и загорается лампочка.
-
Говорю "сколько время" или "который час" (в базе прописаны все подобные варианты)
-
После этого начинается обработка, делаем скидку на плохой интернет (очень тупой 3Г) , медленная реакция файловой системы (может СД карта такая , пока не знаю)
-
Слушаем ответ типа "Босс время в системе ......".
Очень интересно узнать может кто использует другие варианты ?
-
I2C 1-Wire RTCСобрал RTC и 1-Wire.
Схема:
То что получилось
Настройка RTC
Добавляем в систему I2C если ранее это не сделано.
Редактируем файл /etc/modprobe.d/raspi-blacklist.confsudo
nano /etc/modprobe.d/raspi-blacklist.conf
редактируем файл /etc/modules, вставляем #перед строкой blacklist i2c-bcm2708
nano /etc/modules
вставляем в конец строку i2c-dev
ставим I2C тулс
sudo apt-get install i2c-tools
смотрим какие I2C устройства есть на шине
pi@raspberrypi ~ $ i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f00:-- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- 18 -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
sudo modprobe rtc-ds1307
18 - это адрес 1-wire68 - это RTC DS1307
набираем
потом меняем пользователя на root: sudo -s и вводим
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device (для rev 1 Pi) echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device (для rev 2 Pi)
теперь выведем в консоль время с RTC:
pi@raspberrypi ~ $ sudo hwclock -r Set 01 Jan 2000 00:01:20 EEST -0.814742 seconds pi@raspberrypi ~ $ dateSun Jun 16 13:40:36 EEST 2013
для того чтобы записать время из системы в RTC
sudo hwclock -w
Tеперь настроим чтобы часы находились после перезагрузки. Для этого отредактируем файл modules командой
sudo nano /etc/modules
и добавим туда rtc-ds1307
потом отредактируем файл /etc/rc.localsudo
nano /etc/rc.local
и добавим в него
echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device (для v1 raspberry pi) echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-1/new_device (для v2 raspberry pi)sudo hwclock -s
эти строчки нужно вставить перед строкой exit 0
Все теперь в системе есть RTC.OWFS настраивал по инструкции с этого сайта
http://wiki.temperatur.nu/index.php/OWFS_with_i2c_support_on_Raspberry_Pi_(English_version)
-
Добавляем кнопку Hard ResetБыл у меня момент когда отключили инет,и сделать рестарт на малине я ни как не мог,кроме выдернуть БП из сети и запустить заново.
Вот и появилась идея сделать кнопку reset,перелопатив интернет нашёл несколько решений,но выбрал этот способ.
1)Куда припаивать
2)Что припаивать
3)ПрипаиваемГотово
Подробнее в моём блоге: http://raspberrylive.blogspot.com/
Спасибо за внимание.
-
Расширяем дисковое пространство с помощью Google DriveПрочитав статью про подключения к Малине облачного диска "Яндекс.Диск" я решил повторить описанное у себя на малине. Проблема в том, что экосистемой Яндекса я не пользуюсь, а регистрировать аккаунт ради одного только "Диска" - не вижу смысла. К тому же у меня уже есть аналогичный сервис от Google - "Google Drive"
Покопавшись в интернете, собрав из кусков информацию я сумел подключить гуглодиск. Как это сделать опишу ниже. Замечу только, что инструкция рассчитана на то что у вас уже есть аккаунт GoogleDrive. Если нету - вы всегда можете зарегистрировать его здесь https://drive.google.com/
Итак, приступим.
Для начала зайдем на сайт http://dav-pocket.appspot.com/ . Тут нам нужно зарегистрировать аккаунт. Это нужно потому, что изначально Google Drive не поддерживает протокол WebDav, а наш софт, который мы будем использовать для монтирования работает именно с ней. Сайт выступает в роли промежуточного звена - он берет данные из Google Drive и как бы выставляет их в виде WebDav. Для регистрации нужно нажать оранжевую кнопку "Sign up", после чего ввести желаемое имя пользователя и пароль (дважды). Подтверждение по Email не требуется, так что вас сразу перенаправят на следующую страницу, где нужно будет нажать кнопку "Authorize DAV-pocket service". По её нажатию Вас перенаправит на страницу гугла, где Вы должны будете предоставить доступ к Вашему аккаунту. После проделанного вас перебросит на страницу, где вам будут выданы данные для подключения, а именно Server Adress (адрес сервера), Login (логин) и Password (пароль :). Можете оставить эту вкладку открытой, или просто сохраните эти данные - они понадобятся нам во время следующих действий. Когда все описанное выше проделано, вооружимся консолью Raspberry Pi и выполним в нем следующие команды:
- Установим davfs2:
sudo apt-get install davfs2
Соглашаемся на то, чтобы система скачала архив.
- Перенастроим пакет davfs2
sudo dpkg-reconfigure davfs2
В открывшемся интерфейсе выбираем "Да". Этим мы позволим монтировать систему непривилегированным пользователям ОС.3.Добавим нашего пользователя в группу davfs2
sudo usermod -aG davfs2 pi
pi - это имя пользователя. Если вы меняли стандартное имя то впишите вместо "pi" имя вашего пользователя. 4. Создадим папку, куда будет монтироваться наше облако.
mkdir Gdrive
Опять же. "Gdrive" - имя папки. Вы можете выбрать любое которое нравится Вам, но в дальнейшем инструкция будет написана именно для этого имени файла. 5. Настроим параметры авторизации.
sudo nano /etc/davfs2/secrets
Откроется файл, в конец которого надо добавить запись формата:
https://dav-pocket.appspot.com/docso [Логин выданный сайтом] [пароль выданный сайтом]
Логин и пароль нужно ввести без квадратных скобок. То есть, к примеру, если сайт выдал Вам логин "Login123", а пароль "parol", то запись будет такой:
https://dav-pocket.appstot.com/docso Login123 parol
Сохраняем файл -Ctrl+O и закрываем его - Ctrl+X
- Настраиваем автоматическое монтирование.Для того чтобы наше облако автоматически монтировалось при инициализации сетевого интерфейса нам нужно отредактировать файл fstab
sudo nano /etc/fstab
В него нужно дописать следующую строку (в конец)
https://dav-pocket.appspot.com/docso [абсолютный путь к папке монтирования] davfs uid=1000,user,rw,_netdev 0 0
абсолютный путь к папке указывается БЕЗ квадратных скобок, и выглядеть должен как путь из корня файловой системы. Например если Вы создали папку Gdrive в домашней папке пользователя pi, то путь будет выглядеть так:
/home/pi/Gdrive
Сохраняем файл - Ctrl+O и закрываем его - Ctrl+X, по уже знакомой нам схеме.Теперь осталось только перезагрузить Малинку для проверки автоматического монтирования.
sudo reboot
Если все сделано правильно, то в папке которую вы создали и выбрали как точку монтирования должны появиться файлы находящиеся на облаке (советую закачать туда хоть что-то для наглядности, если у вас там пусто). Эти файлы не занимают места на SD карте, но при этом остаются доступными для редактирования.Надеюсь эта статья будет кому-то полезна. Если вы найдете какие-то ошибки, или у вас возникнут какие-то вопросы - пишите это все в комментарии - буду рад ответить.
-
проблема с чтением по шине i2c Raspberry piв итоге я разобрался с этой задачей, буду пытаться продвигаться дальше в этом деле, на очереди освоение непосредственно компаса
Datasheet AK8973 (трех осевой электронный компас );
Спасибо artyr_n за помощь, и пояснения.
Микросхема взята из бортового компьютера от Mitsubishi Pajero Sport 2012 года выпуска
Цель была, подключить AK8973 через шину i2c к raspberry pi , и прочитать значение температуры
-
проблема с чтением по шине i2c Raspberry piНе могу разобраться с чтением байта из микросхемы вроде все по инструкции делаю а результат всегда один и тот же ( микросхема трех осевой компас); не получается читать из микросхемы, пробовал способом описанным на картинке, кто знает наставьте на путь истинный, сверху ссылка на даташит.
Буду признателен за любую информацию. думаю на картинке все ясно
Спасибо @artyr_n за помощь в воплощении дальнейших телодвижений с попытками чтения регистров AK8973Я в итоге продвинулся в этом деле , но цель не в полном объеме достигнута , буду ковыряться дальше интересно то что в регистрах записаны одни и те же значения 0х00Я так и не понял адресацию что значит это 0х00 и почему в документации написано к примеру адрес C1H а его надо как то видоизменять типа 0хс1 или 0х1h
посоветуйте где искать ответы комментарии очень приветствую -
Подключение символьного 16х2 LCD дисплея по I2CЕдинственный рабочий вариант, кторый мне попался (перепробовал много разных)Дисплей наиболее распространенный в данный момент на eBay. Вот такой:
С физическим подключением ни каких проблем. Питание 5В, земля и SDA/SCL взяты с RPi.
Для дисплейчика идеально подошла колодка от старого компового БП (которая на дисковод)а вот с драйверами и прочим была засада. С трудом нашел рабочий вариант.
Сначала поднимем в системе поддержку i2c - редактируем /etc/modules
sudo nano /etc/modules
добавив: i2c-bcm2708 i2c-dev в конец файла. После сохранения требуется перезагрузка.
Проверяем, и если нужно, накатываем необходимые пакеты:
sudo apt-get install python-smbussudo apt-get install i2c-tools
Редактируем /etc/modprobe.d/raspi-blacklist.conf закомментировав (#)
blacklist spi-bcm2708 blacklist i2c-bcm2708
Создаем библиотечку ‘i2c_lib.py’
import smbus from time import * class i2c_device: def __init__(self, addr, port=1): self.addr = addr self.bus = smbus.SMBus(port) # Write a single command def write_cmd(self, cmd): self.bus.write_byte(self.addr, cmd) sleep(0.0001) # Write a command and argument def write_cmd_arg(self, cmd, data): self.bus.write_byte_data(self.addr, cmd, data) sleep(0.0001) # Write a block of data def write_block_data(self, cmd, data): self.bus.write_block_data(self.addr, cmd, data) sleep(0.0001) # Read a single byte def read(self): return self.bus.read_byte(self.addr) # Read def read_data(self, cmd): return self.bus.read_byte_data(self.addr, cmd) # Read a block of data def read_block_data(self, cmd): return self.bus.read_block_data(self.addr, cmd)далее сам драйвер lcddriver.pyimport i2c_lib from time import * # LCD Address ADDRESS = 0x27 # commands LCD_CLEARDISPLAY = 0x01 LCD_RETURNHOME = 0x02 LCD_ENTRYMODESET = 0x04 LCD_DISPLAYCONTROL = 0x08 LCD_CURSORSHIFT = 0x10 LCD_FUNCTIONSET = 0x20 LCD_SETCGRAMADDR = 0x40 LCD_SETDDRAMADDR = 0x80 # flags for display entry mode LCD_ENTRYRIGHT = 0x00 LCD_ENTRYLEFT = 0x02 LCD_ENTRYSHIFTINCREMENT = 0x01 LCD_ENTRYSHIFTDECREMENT = 0x00 # flags for display on/off control LCD_DISPLAYON = 0x04 LCD_DISPLAYOFF = 0x00 LCD_CURSORON = 0x02 LCD_CURSOROFF = 0x00 LCD_BLINKON = 0x01 LCD_BLINKOFF = 0x00 # flags for display/cursor shift LCD_DISPLAYMOVE = 0x08 LCD_CURSORMOVE = 0x00 LCD_MOVERIGHT = 0x04 LCD_MOVELEFT = 0x00 # flags for function set LCD_8BITMODE = 0x10 LCD_4BITMODE = 0x00 LCD_2LINE = 0x08 LCD_1LINE = 0x00 LCD_5x10DOTS = 0x04 LCD_5x8DOTS = 0x00 # flags for backlight control LCD_BACKLIGHT = 0x08 LCD_NOBACKLIGHT = 0x00 En = 0b00000100 # Enable bit Rw = 0b00000010 # Read/Write bit Rs = 0b00000001 # Register select bit class lcd: #initializes objects and lcd def __init__(self): self.lcd_device = i2c_lib.i2c_device(ADDRESS) self.lcd_write(0x03) self.lcd_write(0x03) self.lcd_write(0x03) self.lcd_write(0x02) self.lcd_write(LCD_FUNCTIONSET | LCD_2LINE | LCD_5x8DOTS | LCD_4BITMODE) self.lcd_write(LCD_DISPLAYCONTROL | LCD_DISPLAYON) self.lcd_write(LCD_CLEARDISPLAY) self.lcd_write(LCD_ENTRYMODESET | LCD_ENTRYLEFT) sleep(0.2) # clocks EN to latch command def lcd_strobe(self, data): self.lcd_device.write_cmd(data | En | LCD_BACKLIGHT) sleep(.0005) self.lcd_device.write_cmd(((data & ~En) | LCD_BACKLIGHT)) sleep(.0001) def lcd_write_four_bits(self, data): self.lcd_device.write_cmd(data | LCD_BACKLIGHT) self.lcd_strobe(data) # write a command to lcd def lcd_write(self, cmd, mode=0): self.lcd_write_four_bits(mode | (cmd & 0xF0)) self.lcd_write_four_bits(mode | ((cmd << 4) & 0xF0)) # put string function def lcd_display_string(self, string, line): if line == 1: self.lcd_write(0x80) if line == 2: self.lcd_write(0xC0) if line == 3: self.lcd_write(0x94) if line == 4: self.lcd_write(0xD4) for char in string: self.lcd_write(ord(char), Rs) # clear lcd and set to home def lcd_clear(self): self.lcd_write(LCD_CLEARDISPLAY) self.lcd_write(LCD_RETURNHOME)ну и тестовый скрипт lcd.pyimport lcddriver from time import * lcd = lcddriver.lcd() lcd.lcd_display_string("Hello world", 1) lcd.lcd_display_string("I am a Raspberry Pi", 2) #lcd.lcd_display_string("My name is", 3) #lcd.lcd_display_string("picorder", 4)
Особо внимательный заметили, что оно и для 4х строчных экранчиков подходит. Первоисточник тут: http://www.recantha.co.uk/blog/?p=4849
-
Установка LAMP и создание I2P сайта на Raspberry PiУстановка LAMP и создание I2P сайта на Raspberry Pi
1. Установка LAMP (Linux + Apache + MySQL + PHP)
а) Устанавливаем Apache + PHP:
sudo apt-get install apache2 php5 libapache2-mod-php5
Делаем рестарт Apache:
sudo service apache2 restart
Теперь введите IP-адрес Raspberry Pi и вы должны увидеть надпись на странице "It works!". Значит Apache установлен и работает.
Чтобы включить Htaccess нужно изменить конфиг файл:
sudo nano /etc/apache2/sites-enabled/000-default
меняем везде строку
AllowOverride None на AllowOverride ALL
затем Y проверяем путь и нажимаем Enter и еще раз перезагружаем Apache.б) Установка MySQL-сервера:
sudo apt-get install mysql-server mysql-client php5-mysql
После установки пароля для root пользователя жмем Enter и ждем окончания установки.
в) Установка PhpMyAdmin:
sudo apt-get install phpmyadmin
В процессе установки Вас попросят ввести пароль root пользователя (который мы установили в предыдущем пункте).
Это нужно чтобы установить свои таблицы с настройками.
Также Вас попросят установить пароль в админ панель базы данных.
После удачной установки вновь сделаем рестарт Apache.
Сделаем помощь Apache, подключив конфигурации для веб-сервера от phpmyadmin.
Для этого выполним:
sudo nano /etc/apache2/apache2.conf
И в самый конец файла вставим:
Include /etc/phpmyadmin/apache.conf
затем Y проверяем путь и подтверждаем Enter.И опять повторно перезапускаем Apache.
Пробуем зайти в PMA (http://ip-адрес Raspberry Pi/phpmyadmin)
На этом установка LAMP завершена.
Перейдем к установке I2P и запуску сайта.
2. Установка I2P
Скачиваем jar инсталятор.
cd /home/pi wget https://geti2p.net/ru/download/0.9.11/https/download.i2p2.de/i2pinstall_0.9.11.jar/download
Далее в Paspberry Pi введите:
java -jar i2pinstall_0.9.11.jar
P.S. Если вы попытаетесь установить его через SSH у вас ничего не выйдет.
Для установки через SSH:
java -jar i2pinstall_0.9.11.jar -console
После успешной установки запустите I2P роутер:
/home/pi/i2p/i2prouter start
И дождитесь пока туннели не запустятся (это примерно 2 минуты).
После того как туннели запустятся переходим к запуску сайта.
3. Настройка и запуск сайта
а) Заходим в менеджер туннелей и находим кнопку - Новый серверный туннель: создать.
Нажимаем на ее, предварительно выбрав в выпадающем списке "HTTP".
б) В появившийся форме заполняем несколько полей:
- Название(N). Нужно для отображения в списке туннелей (назвать можно по любому, но чтобы не запутаться называем также как и домен сайта)
- Адрес(H). Оставляем неизменным: 127.0.0.1
- Порт(P). Также оставляем неизменным: 80
- Имя веб-сайта(W). Адрес сайта который вы будете использовать. Заполнять без http://
- Поле Локальный адрес назначения(L) не заполнять, оно автоматически заполнится после создания тоннеля.
ВНИМАНИЕ! После создания туннеля сделайте бэкап файла указанного в поле Файл секретного ключа(k).
Этот файл, в котором будет храниться ключ, по которому генерируется адрес туннеля. Иначе, при его потере, вы потеряете доменное имя. Оно будет забито за вами, но вы не будете иметь к нему доступ.
Он находится в корне папки /home/pi/i2p
Также желательно поставить галочку возле Автозапуск(A). Это необходимо в случаи аварийного отключения света в доме или по другими причинам перезагрузки Raspberry Pi. В дальнейшем при запуске I2P данный туннель будет запущен автоматически.
Дальнейшие настройки не трогаем (пока что, если надо будет вы их измените в процессе эксплуатации сайта) и жмем внизу страницы кнопку "Сохранить".
Все серверный туннель вашего сайта создан.
Осталось положить файлы сайта в /var/www и все! Сайт полностью запущен в I2P сети.
Примечание. Необязательно выполнять. Нужно только тем администраторами, которые собираются хостить на Paspberry Pi несколько I2P сайтов. Для этого нужно произвести соответствующую настройку Apache Virtual Hosts.
Для этого выполните:
cd /etc/apache2/sites-available sudo touch namei2psite // создали файл namei2psite (назвать можете как и домен сайта) nano namei2psite
И вставим это содержимое:
DocumentRoot /home/pi/www/namei2psite //путь к директории с сайтом ServerName namei2psite.i2p //url сайта Options FollowSymlinks AllowOverride All
Сохраним файл и выйдем из nano.
Теперь создадим для другого сайта.
Скопируем файл namei2psite:
sudo cp namei2psite namei2psite2
И изменим строку DocumentRoot и Directory на папку где лежим сайт namei2psite2
Создадим симлинк (символическую ссылку на один файл в другой директории):
ln -s /etc/apache2/sites-available/namei2psite /etc/apache2/sites-enabled/namei2psite ln -s /etc/apache2/sites-available/namei2psite2 /etc/apache2/sites-enabled/namei2psite2
После чего делаем рестарт Apache и сайты работают.
Примечание. Для лучшего понимания ОС, стоит добавить перенаправление созданного хоста на 127.0.0.1 в файл в /etc/hosts. Так мы укажем ОС, что сайт хостится у нас.
Добавите в конец файла:
127.0.0.1 namei2psite.i2p 127.0.0.1 namei2psite2.i2p
Делаем рестарт Apache.
На этом настройка и установка I2P сайта завершена.
Удачи в освоении I2P сети.
Иногда бывает что в доме отключают свет и после его включения Paspberry Pi запускается, но i2p router не запускается вместе с ним. Чтобы это исправить достаточно добавить в автозагрузку скрипт запуска роутера.
Делается это так:
sudo nano /etc/crontab
И в конец файла добавьте эту строчку:
@reboot pi /home/pi/i2p/i2prouter start
Перезагрузите Paspberry Pi и проверьте что после его запуска i2p router сам запуститься.
I2P
LAMP
ВЕБ-СЕРВЕР -
Очень нужна ваша помощь. ВидеонаблюдениеЗдравствуйте. подскажите как сделать с помощью raspberry pi, чтобы на любом компьютере с интернетом можно было ввести адрес и увидеть видео с web камеры подключенной к Raspberry.
Имеется сам Raspberry уже с операционной системой, доступ в интернет, Web камера.Именно через интернет, а не по локальной сети. Допустим зайти со смартфона и посмотреть видео в режиме онлайн.
-
Raspberry Pi и mjpg-streamer или видеотрансляцияЭто моя первая статья о Raspberry Pi.
Сначала думал сделать IP-камеру для наблюдения за машиной под окном, но угол обзора у камеры всего около 30 градусов. Потом думал сделать видеоняню и столкнулся с тем , что светочувствительность никакая. Даже ночник не помог. В итоге просто сделал камеру с доступом по сети ради простого любопытства.
Часть первая. Установка необходимого ПО
Что использовалось:
- Raspberry Pi, Raspberry Camera module,
- приложение для смартфона (на Android) IP Cam Viewer,
- программа захвата видео и трансляции в сеть mjpg-streamer
По поводу установки образа на «малину» я ничего писать не буду, поскольку это уже много раз описывалось.
Подразумевается, что Вы уже умеете это делать.
Итак приступим.
Подключаемся по SSH к «малине» и первое, что мы делаем это запускаем обновление
sudo apt-get update
sudo apt-get upgrade(процедура длительная, наберитесь терпения)
Затем заходим в raspi-configи включаем поддержку камеры
sudo raspi-config
меняем значение с Disable на Enable
Перезагружаемся, снова коннектимся и устанавливаем дополнительные библиотеки и приложения, которые нужны дляmjpg-streamer:
sudo apt-get install libjpeg8-dev sudo apt-get install cmake wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip
разархивируем
unzip ./master –d ./ms (ms я взял сам, чтобы не писать постоянно полное имя)
Переходим в папку
cd /ms/mjpg-streamer-master/mjpg-streamer-experimental
и собираем
make clean all
Изменяем файл start.sh командой
sudo nano ms/mjpg-streamer-master/mjpg-streamer-experimental/start.sh
убираем две незакомментрованные строки и пишем вместо них вот эти
cd etc/ms/mjpg-streamer-master/mjpg-streamer-experimental ./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -x 640 -y 480 -fps 10 -ex auto -awb auto -vs -ISO 100"
должно получиться вот так
"./output_http.so -w ./www"– вывод изображения на вебсервер
"./input_raspicam.so -x 640 -y 480 -fps 10 -ex auto -awb auto -vs -ISO 100"-- захват видео с камеры и параметры захвата (640х480, 10 к/с, экспозиция АВТО, автобаланс белого, вертикальная синхронизация и ISO 100). На самом деле все эти параметры можно убрать, оставив только разрешение и частоту кадров, остальное эт просто опции.
Далее выходим из редактора nano командой Ctrl+X, затем Enter(соглашаемся с изменением) и Y(да). Находясь в папке mjpg-streamer-experimental запускаем наш скрипт
./start.sh
Должно запуститься и в консоли увидите следующее:
и светодиод на камере должен загореться.
Выход командойCtrl+C. Скрипт остановится и светодиод погаснет.
Далее с браузера заходим по такой ссылке:http://ip-address-raspberry:8080/?action=stream(где ip-address-raspberry – это IP Вашей «малины»)и попадаем на вебсервер, нажимаем на Stream.
Естественно Ваши устройства должны быть в одной сети: компьютер с Putty, «малина» и телефон с Ip Cam Viewer. Если Ваш комп не видит малину, Но Вы точно знаете что SSH имеет доступ, то вероятно у Вас роутер блокирует связь между устройствами. Я так однажды попал. Не наступайте на те же грабли
Теперь нам надо подключиться с телефона к нашей камере. Я использовал программу IP Cam Viewer, так как она содержит богатый функционал.
Что там нужно сделать, так это только добавить Вашу камеру :
нажимаем «меню», «управление камерами», затем «+» для добавления новой камеры, выбираем «стандартный адрес», Имя: любое; Производитель «Generic URL»; Модель «Generic URL»; URL «вписываем точно такой же адрес «: http://ip-address-raspberry:8080/?action=stream», затем нажимем «Тест» и если изображение с камеры получено, то сохраняем.
Теперь о настройках камеры. Сама камера тоже имеет много настроек изображения. Начиная от разрешения и частоты кадров, заканчивая наложением всяких эффектов. Подробно можно вязть описание с ресурса https://github.com/jacksonliam/mjpg-streamer/blob/master/README.md
Собственно с этого ресурса я взял всю информацию по настройке. Как Вы заметили, я взял разрешение камеры 640х480 и частоту кадров 10 к/с. Максимально возможные эти параметры 1920х1080х30.
Собственно вот результат:
А это на телефоне:
-
Портретная ориентация изображенияДобрый день.
Подскажите пожалуйста как можно реализовать портретный вывод информации по HDMI. Чуть деталей:
К raspberry подключена матрица на 55' по интерфейсу HDMI - Сам raspberry при подаче напряжения включается (попутно подавая команду матрице на включение) и начинается загрузка ОС
Необходимо реализовать:
-
При включении raspberry на матрицу изображение выводится в портретном режиме
-
При загрузке ОС нет ни каких системных надписей и прочего, просто черный экран и лого в центре.
Для участия в небольшом проекте, требуются:
-
Специалист в ОС debian gnu/linux
-
Электронщик (народный кулибин)
-
-
Подключение LCD дисплея к Raspberry PiКто бы мог подумать еще в 2010 году, что такое явление как "Raspberry Pi" обретет тысячи поклонников по всему миру.
Не смог пройти мимо и я. Сегодня я покажу на примере как подключать и использовать LCD (хотя аббревиатура уже включает в себя слово "дисплей" далее я будут все равно его использовать) совместно с Raspberry Pi.
Скажу сразу: статья ориентирована на тех, кто не первый раз сталкивается с Raspberry.
Пример подключения LCD дисплея к Raspberry Pi
На борту Raspberry Pi имеет особый разъем типа GPIO. К нему-то мы и подключим дисплей.Выбор LCD дисплея
Для наших целей подойдет любой жидкокристаллический знакосинтезирующий (символьный) дисплей на базе микроконтроллера Hitachi HD44780U или его аналогов. LCD дисплеи бывают 8x2, 16x2, 4x20 и т.д. - строк на количество знаков. Их выпускает куча разных фирм - Winstar, МЭЛТ и другие.Для сборки прототипа я приобрел дисплей Winstar WH0802A-YYH-CT. Теперь нужно определиться с порядком соединения пинов на разъеме IDC с пинами на GPIO, плюс разобраться как мы подключим питание к нашему дисплею.Оказывается все просто! В документации находим таблицу с распиновкой порта LCD дисплея для 4-х битного режима и дополняем ее следующим образом:
Где GND - это "минус", а +5V - "плюс" питания, которое мы берем все из того же GPIO разъема. Подписи GPIO - соответствуют ... ну вы сами догадались)Данный дисплей имеет подсветку. Для ее включения достаточно подключить LEDA к +5V, а LEDK - к GND.
!ВНИМАНИЕ! Для использования LCD дисплея в данной схеме ваш источник питания, который вы подключаете к Raspberry Pi, должен быть рассчитан на потребляемый ток, как минимум, 2А. !ВНИМАНИЕ!
Выбор и использование библиотек для работы с LCD дисплеем
Для работы с LCD дисплеем нам нужно написать программу. Делать это я буду на языке Си. Но для компиляции листинга нам потребуется загрузить набор библиотек. Мой выбор пал на пакет библиотек wiringPi , который был использован в статье. Сам пакет предназначен не только для подключения LCD дисплея.Процесс установки пакета описан на сайте.
Листинг "mylcd.c" с текстом программы я привожу ниже (по стандарту С99).#include <stdio.h> //стандартная библиотека ввода-вывода #include <wiringPi.h> //библиотека из пакета wiringPi #include <lcd.h> //библиотека из пакета wiringPi int main (void) { printf ("Raspberry Pi LCD test\n") ; //Инициализация порта GPIO if(wiringPiSetup ()==-1) { printf ("GPIO Setup failed!\n") ; } int fd; printf ("Start LCD initialization...\n") ; //Инициализация LCD fd = lcdInit (2,8,4, 11,10, 1,0,2,3,0,0,0,0); if(fd==-1){ printf ("Initialization failed\n") ; } else{ printf ("GO!\n"); //Очистка дислпея lcdClear(fd); //Перевод каретки на первую позицию первой строки lcdPosition (fd,0,0); //Вывод форматированного текста lcdPrintf(fd, "Hello Pi"); //Перевод каретки на вторую строку и вывод текста lcdPosition (fd,0,1); lcdPrintf(fd, " World!"); } return 0; }
В листинге нас особо интересует следующие функции:
1.wiringPiSetup()- функция для инициализации порта GPIO2.
lcdInit(int rows, int cols, int bits, int rs, int strb, int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7) - функция для инициализации LCD дисплея, где:
- int rows - число строк дисплея (у нас 2)
- int cols - число знаков в строке (у нас
- int rs - маппинг порта wiringPi на управляющий регистр дисплея RS (у нас 11)
- int strb - маппинг порта wiringPi разрешающий регистр дисплея E (у нас 10)
- int d0, int d1, int d2, int d3, int d4, int d5, int d6, int d7 - маппинг портов wiringPi на шину данных дисплея3.
lcdPrintf(int handle, char *message, …) - в качестве int handle передаем указатель на дисплей, * message - указываем в кавычках текст для вывода
Теперь чуть подробнее про маппинг. В wiringPi используется понятие мапинга (привязки) физических пинов порта GPIO к "виртуальным" пинам - wiringPi. Таблица с маппингом приведена выше. Сопоставив ее с таблицей 1 мы и получим комбинацию
fd = lcdInit (2,8,4, 11,10, 1,0,2,3,0,0,0,0);
Пины int d4, int d5, int d6, int d7 в 4-х битном режиме не используются! Итак, мы сохранили листинг с программой в файле "mylcd.c" в директории /home/pi/wiringPi/ (которая создается автоматически после установки пакета).
Далее для компиляции кода набираем в консоли:
gcc -Wall -o mylcd wiringPi/mylcd.c -lwiringPi -lwiringPiDev
Если не вывелось никаких "ворнингов" и "эрроров" - значит повезло программа написана верно!Для запуска программы набираем в консоли:
sudo ./mylcd
Получаем диагностические сообщения, которые мы сами и выводим:Raspberry Pi LCD testStart LCD initialization...GO!
Смотрим на результат:
О том как подключить 4х строчный дисплей к Raspberry Pi читайте в моей оригинальной версии полной статьи, которая размещена в моем блоге: http://shabpoint.blogspot.ru/2013/09/lcd-raspberry-pi.html
-
Подключение Raspberry Pi к Wi-FiРассмотрим подключение Raspberry Pi к беспроводной Wi-Fi сети.
Мы не будем рассматривать установку драйверов для специфичных Wi-Fi адаптеров, а будем подразумевать, что адаптер уже настроен.
Чтобы не мучиться с настройкой Wi-Fi адаптера, я рекомендую использовать USB приёмники, которые автоматически определяются в Raspbian и работают "из коробки", например такой - http://smartelectronika.com/viewproduct/35/
- Смотрим список доступных Wi-Fi сетей
iwlist wlan0 scan
- Генерируем WPA PSK ключ на основании пароля для выбранной сети и записываем его в конфиг /etc/wpa_supplicant/wpa_supplicant.conf:
wpa_passphrase %essid выбранной сети% %пароль к сети% > /etc/wpa_supplicant/wpa_supplicant.conf
После перезагрузки подключение к выбранной сети произойдёт автоматически.
Можно обойтись без перезагрузки -
/sbin/ifdown wlan0 подождать 3-5 секунд /sbin/ifup --force wlan0
Внимание! В Raspbian Stretch необходимо добавить строки
country=RU ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
в начало файла /etc/wpa_supplicant/wpa_supplicant.conf
-
FT FTP доступ к файлам и папкам на Raspberry PiНам понадобиться доступ по SSH или клавиатура подключенная к RPi.
Все предельно просто, установим пакет
sudo apt-get install pure-ftpd -y
Проверить работу можно с помощью любого FTP клиента, например FileZilla.
В качестве логина и пароля для FTP используйте логин и пароль, который используете для входа в систему.
На этом все)
-
Пассивное охлаждение Raspberry Pi: факты и цифрыНедавно писал в своём личном блоге об опыте охлаждения моей Raspberry Pi радиаторами Zalman и последующем разгоне.
Ссылка на полное описание процесса: http://kspitfire.blogspot.com
Сюда же выложу несколько фото и результаты температурных замеров CPU
Вентиляторы невысокие, смотрятся очень аккуратно. Извиняюсь за размытость фото, щелкал на старый телефон.
Температуру замерял при каждой "покорённой" частоте, в трёх режимах загрузки CPU. Записывал среднее арифметическое результатов 15ти замеров. Такие результаты:
В целом, даже пассивное охлаждение справляется с задачей нагрева при разгоне.