Всем привет сегодя я хотел рассазать о установке русскoй раскладки на малине.
есл вы знаете как это делать то не читайте,
прошу не судите строго я только первый год освaеваю его.
для настройки нужно:
1.RPI
2.права админа
3.клавиатура и мышь
----------настройка---------
ВНИМАНИЕ! ПЕРЕД УСТАНОВКОЙ ДОЛЖНА БЫТЬ ЛАТИНСКАЯ РАСКЛАДКА
Пишем в терминал
sudo raspi-config
Выбираем configure_keyboard и жмем enter
Выбираем модель вашей клавиатуры (я выбрал BTC 5090
Указываем раскладу клавиатуры русская
Выбираем удобное сочетание для смены раскладки клавиатуры
Жмем обе клавиши с логотипом
Выбираем клавишу которую вы хотите использовать как AltGr
Выбираем составную клавишу
И жмем да
Жмем tab, выбираем finish.
Перегружаем пирог
теперь нажимаем сочитание
которое поставил
и радуйся!
--------ОШИБКА ПРИ УСТАНОВКЕ------
Один раз я gытался поставить русский язык не посоветовавшись с инетом и запортил себе систему(квадратики вместо букв и невозможно войти)
чтобы этого не допустить проверяйте каждое своё действие и подумайте что может случится !
я исправил проблему подключившись по ssh и поменял raspi-config
с наилучшими пожеланиями!
Bаш Серега
Сейчас я хочу описать, как преобразовать речь человека , а затем обработать полученные данные.
Хочу сразу заметить , что ни одно готовое решение для Linux найденное в интернете у меня сразу не заработало, все настраивалось экспериментально. Как известно, raspberry pi не имеет входа для микрофона, но это не проблема поскольку можно подключить usb микрофон. Как всегда в магазине микрофона не оказалось и я взял usb камеру со встроенным микрофоном Microsoft VX-800, которая входит в список поддерживаемых устройств на сайте производителя. Начинаем подключать. Для начала надо установить некоторые пакеты, делаем:
#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.
-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 с набором вопросов и ответов.
а можно какой то скрипт запустить. Пример. Запускаем скрипт и говорим "сколько время".
#!/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Г) , медленная реакция файловой системы (может СД карта такая , пока не знаю)
Слушаем ответ типа "Босс время в системе ......".
Очень интересно узнать может кто использует другие варианты ?
Прочитав статью про подключения к Малине облачного диска "Яндекс.Диск" я решил повторить описанное у себя на малине. Проблема в том, что экосистемой Яндекса я не пользуюсь, а регистрировать аккаунт ради одного только "Диска" - не вижу смысла. К тому же у меня уже есть аналогичный сервис от 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
Откроется файл, в конец которого надо добавить запись формата:
Настраиваем автоматическое монтирование.Для того чтобы наше облако автоматически монтировалось при инициализации сетевого интерфейса нам нужно отредактировать файл 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 карте, но при этом остаются доступными для редактирования.Надеюсь эта статья будет кому-то полезна. Если вы найдете какие-то ошибки, или у вас возникнут какие-то вопросы - пишите это все в комментарии - буду рад ответить.
Не могу разобраться с чтением байта из микросхемы вроде все по инструкции делаю а результат всегда один и тот же ( микросхема трех осевой компас); не получается читать из микросхемы, пробовал способом описанным на картинке, кто знает наставьте на путь истинный, сверху ссылка на даташит.
Буду признателен за любую информацию. думаю на картинке все ясно
Спасибо @artyr_n за помощь в воплощении дальнейших телодвижений с попытками чтения регистров AK8973Я в итоге продвинулся в этом деле , но цель не в полном объеме достигнута , буду ковыряться дальше интересно то что в регистрах записаны одни и те же значения 0х00Я так и не понял адресацию что значит это 0х00 и почему в документации написано к примеру адрес C1H а его надо как то видоизменять типа 0хс1 или 0х1h
посоветуйте где искать ответы комментарии очень приветствую
Единственный рабочий вариант, кторый мне попался (перепробовал много разных)Дисплей наиболее распространенный в данный момент на eBay. Вот такой:
С физическим подключением ни каких проблем. Питание 5В, земля и SDA/SCL взяты с RPi.
Для дисплейчика идеально подошла колодка от старого компового БП (которая на дисковод)а вот с драйверами и прочим была засада. С трудом нашел рабочий вариант.
Сначала поднимем в системе поддержку i2c - редактируем /etc/modules
sudo nano /etc/modules
добавив: i2c-bcm2708 i2c-dev в конец файла. После сохранения требуется перезагрузка.
Проверяем, и если нужно, накатываем необходимые пакеты:
После установки пароля для 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
Создадим симлинк (символическую ссылку на один файл в другой директории):
После чего делаем рестарт Apache и сайты работают.
Примечание. Для лучшего понимания ОС, стоит добавить перенаправление созданного хоста на 127.0.0.1 в файл в /etc/hosts. Так мы укажем ОС, что сайт хостится у нас.
На этом настройка и установка I2P сайта завершена.
Удачи в освоении I2P сети.
Иногда бывает что в доме отключают свет и после его включения Paspberry Pi запускается, но i2p router не запускается вместе с ним. Чтобы это исправить достаточно добавить в автозагрузку скрипт запуска роутера.
Делается это так:
sudo nano /etc/crontab
И в конец файла добавьте эту строчку:
@reboot pi /home/pi/i2p/i2prouter start
Перезагрузите Paspberry Pi и проверьте что после его запуска i2p router сам запуститься.
Здравствуйте. подскажите как сделать с помощью raspberry pi, чтобы на любом компьютере с интернетом можно было ввести адрес и увидеть видео с web камеры подключенной к Raspberry.
Имеется сам Raspberry уже с операционной системой, доступ в интернет, Web камера.Именно через интернет, а не по локальной сети. Допустим зайти со смартфона и посмотреть видео в режиме онлайн.
Сначала думал сделать IP-камеру для наблюдения за машиной под окном, но угол обзора у камеры всего около 30 градусов. Потом думал сделать видеоняню и столкнулся с тем , что светочувствительность никакая. Даже ночник не помог. В итоге просто сделал камеру с доступом по сети ради простого любопытства.
Часть первая. Установка необходимого ПО
Что использовалось:
Raspberry Pi, Raspberry Camera module,
приложение для смартфона (на Android) IP Cam Viewer,
программа захвата видео и трансляции в сеть mjpg-streamer
По поводу установки образа на «малину» я ничего писать не буду, поскольку это уже много раз описывалось.
Подразумевается, что Вы уже умеете это делать.
Итак приступим.
Подключаемся по SSH к «малине» и первое, что мы делаем это запускаем обновление
убираем две незакомментрованные строки и пишем вместо них вот эти
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. Скрипт остановится и светодиод погаснет.
Естественно Ваши устройства должны быть в одной сети: компьютер с 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 на матрицу изображение выводится в портретном режиме
При загрузке ОС нет ни каких системных надписей и прочего, просто черный экран и лого в центре.
Кто бы мог подумать еще в 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/ (которая создается автоматически после установки пакета).
Рассмотрим подключение 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
После перезагрузки подключение к выбранной сети произойдёт автоматически.
Сюда же выложу несколько фото и результаты температурных замеров CPU
Вентиляторы невысокие, смотрятся очень аккуратно. Извиняюсь за размытость фото, щелкал на старый телефон.
Температуру замерял при каждой "покорённой" частоте, в трёх режимах загрузки CPU. Записывал среднее арифметическое результатов 15ти замеров. Такие результаты:
В целом, даже пассивное охлаждение справляется с задачей нагрева при разгоне.
Итак, имеем сабж И купленные в хозмагазине (он у прямо меня в доме на 1 этаже, так что мне повезло) инструменты "распила"
Ножовка по металлу (ДА,ДЕТКА - Я ЛЮБЛЮ ТЯЖЕЛЫЙ МЕТАЛЛ!!!)
Напильник с тремя гранями и ручкой (можно в принципе использовать любой какой есть в наличии)И в разумеется главное "лицо" всей операции - снятый с дохлой материнской платы (а точнее с северного чипа) радиатор (высокий как шпиль и черный как афроамериканец в ночи) :
Обычной линейкой замеряем размеры чипа, проца и стабилизатора питания. Начинаем "распил", желательно расстелив большую газету (на "поле боя" обязательно останется стружка и мелкое крошево от радиатора).Отпилили? Теперь закруглите напильником углы дабы не порезаться и не задеть стоящий рядом с чипами детали. После окончания работы радиатор должен будет выглядеть примерно вот так:
Для приклеивания радиаторов к искомым чипам РасПи я использовал теплопроводный клей Arctic Cooling, но сразу скажу - либо мне попался бракованный образец либо он на самом деле состоит из 2-х компонентной термопасты - радиаторы после выдерживания необходимых 5 часов отказались держаться на РасПи и попросту отпали при попытке поставить платку боком. Поэтому фотография процесса склейки Арктик Кулом, а фактически я попросту приклеил радиаторы нанеся тонкий слой клея "Секунда" - мгновенно, сердито и очень опасно (клей проводит ток так что есть риск замкнуть пару-тройку ножек на микросхемах). Думаю если получится аккуратно снять радиаторы то попробую использовать АлСил-5, если опять подделку не подсунут.
Итак - фото:
Радиаторы
Арктик Кул-овская ванночка для смешивания раствора и лопатка к ней.
Алхимическая и (как выяснилось) не исполняющая своих функций смесь.
Нанесенный клей на чипах РасПи.
А это уже приставленные радиаторы.
И еще парочка:
Итог: Ощутимо снизилась температура на ощупь, термопарой не проверял. Дорогой и хваленый Арктик Кул показал свою полную несостоятельность, а супер-клей "Секунда" - свою исключительную хваткость и цепкость.
Спасибо за внимание, следующий блог будет посвящен моему самодельному корпусу из комплекта "Лего".!
Я недавно писал о своём опыте использования пассивногоохлаждения для RPi. На этом приключения маленькой платы не закончились — была нужда сделать для неё корпус, главная "фишка" которого — встроенный кулер. Что из этого получилось?
Что-то вот такое, маленькое и симпатичное, на мой взгляд (на фото показан корпус ещё без крепления с платой).
Конструкцию корпуса я посмотрел в видео на YouTube.
Мне очень понравилась такая модель тем, что она не наглухо закрытая (есть доступ к GPIO), простая в изготовлении и очень симпатичная. Ок, теперь думаем,что делать с охлаждением. От GPIO разъёмов можно с легкостью запитать пятивольтовый (иногда и 12-ти) кулер от какой-нибудь видеокарты, нетбука или любой другой небольшого размера.
Соединяется всё очень просто: один провод кулера (обычно красный) мы подсоединяем к контакту 5V Power, а второй — к земле (Ground). Главное, не перепутать ничего, ибо это чревато убийством платы. Если всё ок, кулер заводится.
Под него в верхней части я сделал отверстие и прикрепил наверх. Получилось как-то так:
Нижняя часть:
И всё вместе:
Корпус почти готов. Осталось только сделать крепление для платы на нижней планке.Фото с моим креплением, к сожалению, нету. Так как у меня получилось эстетически не очень из-за вытекшего "из-под контроля" суперклея :)Самое интересное — замеры температуры. Привожу ниже таблицу замеров, аналогичную той, что я публиковал в прошлый раз. В скобках указаны замеры прошлых опытов, при наличии пассивного охлаждения. Результат говорит сам за себя.
Конечно, всё это скорее излишне, нежели необходимо. Но всё-таки, тем, у кого есть проблема перегрева платы, советую обратить внимание на такую простую в изготовлении и эффективную с точки зрения охлаждения конструкцию.Как обычно, полное описание процесса я описал в своём блоге — http://kspitfire.blogspot.ru/2013/03/blog-post.htmlУдачи в экспериментах с Raspberry!
Как известно, портов много не бывает. По этому жалко их тратить на подключение банальных кнопок. Особенно когда кнопок много.
Все уже придумали до нас. I2c шина позволяет подключить до 120 устройств потратив на это всего 2 пина на RPi.
Тем более, что есть отличная вешь: PCF8574 (PCF8575). Дистанционный 8-битный расширитель ввода – вывода I2C-шины на 8(16) портов соответственно. Вот к нему то мы и будем цеплять кнопки.
Буква А в маркировке определяет базовый адрес чипа.
Буква P - тип корпуса (DIP1)Описание микросхемы для любознательных
Выводы A0-A2 позволяют изменить адрес чипа на шине путем подачи на них высокого или низкого уровня.
Hint: Обязательно подайте на них или 3.3В или массу. Не подключенные выводы источник презабавнейших глюков.VDD питание +3.3ВVSS земля.SDA/SCL соответственно I2C шина.P0-P7 8 доп портов.INT - крайне полезная вещь - выход прерывания. Т.е. нам не придется постоянно опрашивать микросхему, чтобы определить, изменилось ли состояние портов. Достаточно это сделать после прихода этого самого прерывания :)Я навесил на нее 2 кнопки на порты P4 и P5. Кнопки замыкают эти порты на землю. С железом на этом закончили. Далее все понятно из кода и коментариев к нему:
#!/usr/bin/python# -*- coding: utf-8 -*-# Адрес микросхемы PCF8574i2c_addr = 0x20#
импортируем необходимые библиотеки
import smbus as smbus
import RPIOfrom time
import *from subprocess
import Popen, PIPE
#configure I2C bus for functionsi2c = smbus.SMBus(1)# Настраиваем 25 порт GPIO и подтягиваем его на земл.
RPIO.setup(25, RPIO.IN, pull_up_down=RPIO.PUD_DOWN)# Здесь то, что мы делаем по приходу прерыванияdef gpio_callback(gpio_id, val):
try :
# Читаем из PCF8574
temp = i2c.read_byte( i2c_addr )
print 'PCF8574 at address 0x{0:2x} READ 0x{1:2x}'.format( i2c_addr, temp )
except IOError : print 'PCF8574 Device not found at I2C address 0x{1:2x}'.format( i2c_addr )
error = 1
# Нажата кнопка на порту P4
if (hex(temp)== hex(0xdf)):
# Тут я дергаю экранчик, подключение которого я в прошлой записи описывал.
#p = Popen('/home/pi/mj/LCD-Char/LCD-Test-mj-v4.py Key=1 1 VAL=Press 2', stdout=PIPE, shell=True)
print("gpio %s: %s" % (gpio_id, val))
# Нажата кнопка на порту P5
if (hex(temp)== hex(0xef)):
#p = Popen('/home/pi/mj/LCD-Char/LCD-Test-mj-v4.py Key=2 1 VAL=Press 2', stdout=PIPE, shell=True)
print("gpio %s: %s" % (gpio_id, val))
# Одновременно нажаты обе кнопки
if (hex(temp)== hex(0xcf)):
#p = Popen('/home/pi/mj/LCD-Char/LCD-Test-mj-v4.py Key=1+2 1 VAL=Press 2', stdout=PIPE, shell=True)
print("gpio %s: %s" % (gpio_id, val))
fleg=1
# Настраиваем порт на ожидание прерываний и выполнение выщенаписанной функции
RPIO.add_interrupt_callback(25, gpio_callback, pull_up_down=RPIO.PUD_UP, debounce_timeout_ms=50)
# Ждем прихода прерывания.
RPIO.wait_for_interrupts()
Вместе с обновлением официальной CSI-камеры обновилась и недавно вышедшая Raspberry Pi Zero до версии 1.3. В новой версии к Zero добавился порт для подключения камеры. К сожалению существующие кабели не подходят и для "Нулевой" малинки потребуется докупить специфичный для нее кабель. Я же решил собрать под катом небольшой обзор доступных для нее "mini" HAT- и не HAT-шилдов, а также добавил в конец статьи небольшую подсказку, как отслеживать появление малинки в магазинах.
Не говоря о всяких протоHATов, первыми в дело HATостроения для новой малинки подключились предприимчивые люди, для которых ограничение в один usb-порт и отсутствие возможности использовать Ethernet-кабель оказалось критическим. Сначала появился мануал, как с помощью паяльника, старого usb-хаба, 4-х проводков и 2-х резинок сделать рабочий малинохаб, а затем уже подоспели и более совершенные версии хабов, не использующие паяльник. Секрет в том, что такой хаб подключается с нижней стороны малинки к ее тестовым пинам с помощью 4-х штырьков, имитирующих собой провода из указанного мануала. Грубо говоря эти usb-хабы нельзя назвать HAT, так как они никак не занимают GPIO пины и не сообщают малинке свои данные, что требуется стандартом.
Вот некоторые из таких хабов:
Первым идет USB SHOE, получивший 23 марта 4,384 евро на Кикстартере. На Хабе расположенны 2 обычных usb и 1 micro usb. Кстати, один из usb имеет очень интересное расположение. "Внутренний" usb, как его называет создатель хаба,
предназначен для устройств с очень маленькими размерами, например вот такого маленького wifi-адаптера:
Стоимость хаба начиналась с 25 евро. К сожалению на сайте своего создателя он так и не засветился, так что я не в курсе, где его можно сейчас взять.
Еще один представитель семейства usb-хабов для "нулевой" малинки по имени Hubpixed также был успешно "закикстарчен" 13 марта с 3,194 долларов. От предыдущего собрата он отличается 4-мя "обычными" usb портами, низкой ценой(8$) а также свободным доступом к GPIO малинки. Метод подключения тот же. Сейчас на Кикстартере идет сбор средств на вторую версию хаба, HubPiWi, где один из usb-портов заменен на платку с wi-fi.
4-х портовый хаб стоит 8$(купить). Цена на 3-портовый хаб с wi-fi идет от 11$.
USB-хаб от сайта makerspot.com подкупает своим симметричным расположением портов, по два с каждой стороны. К тому же у него есть отдельный порт microUSB для питания хаба. Два минуса, нет доступа к GPIO и его еще нет в продаже.
Стоимость - 10$(ссылка). Дата релиза - 31 Мая.
Еще одна HAT-плата, прозванная IoT HAT, на этот раз ни имеющая ничего общего с USB, представляет из себя модуль Wi-Fi 802.11n (2.4GHz) + Bluetoth 4.1 (Dual Mode – Classic and Bluetooth Low Energy) и использует тот же чип, что установлен на Raspberry Pi 3. Для своей работы, она использует пины GPIO и может работать не только с "нулевой" малинкой, но и со старшими братьями. К слову на плате имеется разъем для внешней антенны.
Цена вопроса 11$.
Я бы с радостью еще рассказал и о других платах, например о монструозном CRAB'е, добавляющим к малинке порты композитного видео, аудио и VGA, о не прошедшем Кикстартер PiJack'е, добавляющем EthernetRJ45-разъем и о многом другом. Но тогда вам пришлось бы слишком долго листать до сюда, чтобы узнать, как отслеживать появление малинки в магазинах.
На самом деле её можно купить все в тех же официальных магазинах, указанных на офсайте. Но секрет не в этом. Дело в том, что Артур Алвес (Arthur Alves) как-то очень хотел купить себе "Нулевую" малинку. Проверять каждые пять минут странички всех официальных магазинов было нудно, а брать у перекупщиков на ebay было слишком дорого. Тогда он решил написать скрипт, который сам бы проверял странички всех официальных магазинов и оформил сайт под этот скрипт. Теперь любой может проверить наличие "нулевой" малинки в магазинах просто зайдя на его сайт WhereIsMyPiZero.com
PS Пара слов о магазинах. В Россию доставляет только Pi Suply, но стоимость единственного варианта Pi Zero в виде комплекта "Zero + кабели" в 13 фунтов + 9 фунтов доставка убивает с одного взгляда. Adafruit не доставляет ни только в Россию, но и на все известные мне MF-адреса. Я заказывал с PiHut с доставкой в США на MF-адресс, взятый с shopotam.ru. 4£ малинка + 4£ доставка в США + 3$ добавление MF-посылки в упаковку + 11$ доставка до России ~= 1700 р. Доставка с MF-адресса MainBox'a могла бы сэкономить еще 400 р., но я вспомнил о них слишком поздно.