Skip to content
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи
Collapse
piP

pi

@pi
Сводка
Сообщения
6.3k
Темы
1.6k
Группы
1
Подписчики
0
Подписки
0

Сообщения

Последние Лучшие сообщения Спорные

  • Микрофон и распознавание речи на raspberry pi
    piP 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. Происходит все так:

    1. Говорю медленно "Артур" (типа R2 по англиски) , запускается скрипт записи и загорается лампочка.

    2. Говорю "сколько время" или "который час" (в базе прописаны все подобные варианты)

    3. После этого начинается обработка, делаем скидку на плохой интернет (очень тупой 3Г) , медленная реакция файловой системы (может СД карта такая , пока не знаю)

    4. Слушаем ответ типа "Босс время в системе ......".

    Очень интересно узнать может кто использует другие варианты ?


  • I2C 1-Wire RTC
    piP pi

    Собрал RTC и 1-Wire.

    Схема:

    3bd241b1-a40b-423b-bff7-3a3f210252bd-image.png

    То что получилось

    bb2d2817-872c-46d6-8d63-8970d4381699-image.png

    Настройка 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-wire

    68 - это 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
    piP pi

    Был у меня момент когда отключили инет,и сделать рестарт на малине я ни как не мог,кроме выдернуть БП из сети и запустить заново.

    Вот и появилась идея сделать кнопку reset,перелопатив интернет нашёл несколько решений,но выбрал этот способ.

    e44f680b-81c5-4299-8130-6f6ec6563b28-image.png

    1)Куда припаивать
    3afcf3a6-79a0-4bfe-872f-2e92978a5110-image.png
    2)Что припаивать
    cd658b6f-1550-4bb3-a952-a156bed0fe54-image.png
    3)Припаиваем

    d0199237-6f53-4d81-9ee3-b2e256705a76-image.png

    Готово

    Подробнее в моём блоге: http://raspberrylive.blogspot.com/

    Спасибо за внимание.


  • Расширяем дисковое пространство с помощью Google Drive
    piP pi

    Прочитав статью про подключения к Малине облачного диска "Яндекс.Диск" я решил повторить описанное у себя на малине. Проблема в том, что экосистемой Яндекса я не пользуюсь, а регистрировать аккаунт ради одного только "Диска" - не вижу смысла. К тому же у меня уже есть аналогичный сервис от 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 и выполним в нем следующие команды:

    1. Установим davfs2:
    sudo apt-get install davfs2
    

    Соглашаемся на то, чтобы система скачала архив.

    1. Перенастроим пакет 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

    1. Настраиваем автоматическое монтирование.Для того чтобы наше облако автоматически монтировалось при инициализации сетевого интерфейса нам нужно отредактировать файл 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
    piP pi

    в итоге я разобрался с этой задачей, буду пытаться продвигаться дальше в этом деле, на очереди освоение непосредственно компаса

    Datasheet AK8973 (трех осевой электронный компас );

    Спасибо artyr_n за помощь, и пояснения.

    Микросхема взята из бортового компьютера от Mitsubishi Pajero Sport 2012 года выпуска

    Цель была, подключить AK8973 через шину i2c к raspberry pi , и прочитать значение температуры

    1c29f150-90c2-43a4-aae0-cddf2df3dd3f-image.png

    15284e6c-db79-4491-9019-51a92156b64a-image.png

    8faa1bed-8d51-46c7-b156-5d6d7c493466-image.png


  • проблема с чтением по шине i2c Raspberry pi
    piP pi

    Не могу разобраться с чтением байта из микросхемы вроде все по инструкции делаю а результат всегда один и тот же ( микросхема трех осевой компас); не получается читать из микросхемы, пробовал способом описанным на картинке, кто знает наставьте на путь истинный, сверху ссылка на даташит.

    Буду признателен за любую информацию. думаю на картинке все ясно
    1b2fc342-7be1-410f-87ca-f9e18ee496a7-image.png

    Спасибо @artyr_n за помощь в воплощении дальнейших телодвижений с попытками чтения регистров AK8973Я в итоге продвинулся в этом деле , но цель не в полном объеме достигнута , буду ковыряться дальше интересно то что в регистрах записаны одни и те же значения 0х00Я так и не понял адресацию что значит это 0х00 и почему в документации написано к примеру адрес C1H а его надо как то видоизменять типа 0хс1 или 0х1h
    посоветуйте где искать ответы комментарии очень приветствую

    cd5beef7-969d-4eff-acdf-294c47f17268-image.png


  • Подключение символьного 16х2 LCD дисплея по I2C
    piP pi

    Единственный рабочий вариант, кторый мне попался (перепробовал много разных)Дисплей наиболее распространенный в данный момент на eBay. Вот такой:

    f921309f-7a8f-4d0d-83ff-b50492d2bd6d-image.png

    332b6049-b133-43a6-9088-2d3a3f287c5e-image.png

    С физическим подключением ни каких проблем. Питание 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
    piP 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
    ВЕБ-СЕРВЕР


  • Очень нужна ваша помощь. Видеонаблюдение
    piP pi

    Здравствуйте. подскажите как сделать с помощью raspberry pi, чтобы на любом компьютере с интернетом можно было ввести адрес и увидеть видео с web камеры подключенной к Raspberry.

    Имеется сам Raspberry уже с операционной системой, доступ в интернет, Web камера.Именно через интернет, а не по локальной сети. Допустим зайти со смартфона и посмотреть видео в режиме онлайн.


  • Raspberry Pi и mjpg-streamer или видеотрансляция
    piP pi

    Это моя первая статья о 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
    

    0284c044-fdb5-4b10-badf-4dceed5050af-image.png

    меняем значение с Disable на Enable

    4d347f88-edb0-4558-9ef9-515aabcaa7be-image.png

    Перезагружаемся, снова коннектимся и устанавливаем дополнительные библиотеки и приложения, которые нужны для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"
    

    должно получиться вот так

    b9842125-8d57-4589-b39e-e170097791eb-image.png

    "./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
    

    Должно запуститься и в консоли увидите следующее:

    e076b255-bad1-4661-8539-9b05d71c2c56-image.png

    и светодиод на камере должен загореться.

    Выход командой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.

    Собственно вот результат:
    eacdf936-67ff-4503-89f6-790bae76b03e-image.png
    А это на телефоне:
    3bca4a4a-00bf-482c-9862-341356d34318-image.png


  • Портретная ориентация изображения
    piP pi

    Добрый день.

    Подскажите пожалуйста как можно реализовать портретный вывод информации по HDMI. Чуть деталей:

    К raspberry подключена матрица на 55' по интерфейсу HDMI - Сам raspberry при подаче напряжения включается (попутно подавая команду матрице на включение) и начинается загрузка ОС

    Необходимо реализовать:

    • При включении raspberry на матрицу изображение выводится в портретном режиме

    • При загрузке ОС нет ни каких системных надписей и прочего, просто черный экран и лого в центре.

    Для участия в небольшом проекте, требуются:

    • Специалист в ОС debian gnu/linux

    • Электронщик (народный кулибин)


  • Подключение LCD дисплея к Raspberry Pi
    piP 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-х битного режима и дополняем ее следующим образом:

    1a8bba27-73b8-4492-8051-1b8b1e1e6503-image.png

    Где 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 - указываем в кавычках текст для вывода

    b06eee15-28e3-4c44-b055-634051dd7f70-image.png

    Теперь чуть подробнее про маппинг. В 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!

    75d27e28-c4fc-4e51-91b2-1561f0a0df66-image.png

    Смотрим на результат:

    08c92d7d-75de-4986-933b-dc7c4d819a00-image.png

    О том как подключить 4х строчный дисплей к Raspberry Pi читайте в моей оригинальной версии полной статьи, которая размещена в моем блоге: http://shabpoint.blogspot.ru/2013/09/lcd-raspberry-pi.html


  • Подключение Raspberry Pi к Wi-Fi
    piP pi

    Рассмотрим подключение Raspberry Pi к беспроводной Wi-Fi сети.

    Мы не будем рассматривать установку драйверов для специфичных Wi-Fi адаптеров, а будем подразумевать, что адаптер уже настроен.

    Чтобы не мучиться с настройкой Wi-Fi адаптера, я рекомендую использовать USB приёмники, которые автоматически определяются в Raspbian и работают "из коробки", например такой - http://smartelectronika.com/viewproduct/35/

    1. Смотрим список доступных Wi-Fi сетей
    iwlist  wlan0 scan
    
    1. Генерируем 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
    piP pi

    Нам понадобиться доступ по SSH или клавиатура подключенная к RPi.

    Все предельно просто, установим пакет

    sudo apt-get install pure-ftpd -y
    

    Проверить работу можно с помощью любого FTP клиента, например FileZilla.

    В качестве логина и пароля для FTP используйте логин и пароль, который используете для входа в систему.

    На этом все)


  • Пассивное охлаждение Raspberry Pi: факты и цифры
    piP pi

    Недавно писал в своём личном блоге об опыте охлаждения моей Raspberry Pi радиаторами Zalman и последующем разгоне.

    Ссылка на полное описание процесса: http://kspitfire.blogspot.com

    Сюда же выложу несколько фото и результаты температурных замеров CPU

    c17e69bb-d63e-4b14-8c61-799887e799ea-image.png

    Вентиляторы невысокие, смотрятся очень аккуратно. Извиняюсь за размытость фото, щелкал на старый телефон.
    d0d28bc3-c6b9-45c9-9ee2-e165f001e07b-image.png
    Температуру замерял при каждой "покорённой" частоте, в трёх режимах загрузки CPU. Записывал среднее арифметическое результатов 15ти замеров. Такие результаты:
    8f797b2c-c643-4c47-aa8d-732a30778def-image.png
    В целом, даже пассивное охлаждение справляется с задачей нагрева при разгоне.


  • Ice cold, baby! или Радиатор мне ЗАПИЛИ!!!
    piP pi

    Установка радиатора

    Итак, имеем сабж И купленные в хозмагазине (он у прямо меня в доме на 1 этаже, так что мне повезло) инструменты "распила" 🙂

    1. Ножовка по металлу (ДА,ДЕТКА - Я ЛЮБЛЮ ТЯЖЕЛЫЙ МЕТАЛЛ!!!)

    2. Напильник с тремя гранями и ручкой (можно в принципе использовать любой какой есть в наличии)И в разумеется главное "лицо" всей операции - снятый с дохлой материнской платы (а точнее с северного чипа) радиатор (высокий как шпиль и черный как афроамериканец в ночи) :

    350d802d-f046-4f13-8ae6-d111b05fbe27-image.png

    Обычной линейкой замеряем размеры чипа, проца и стабилизатора питания. Начинаем "распил", желательно расстелив большую газету (на "поле боя" обязательно останется стружка и мелкое крошево от радиатора).Отпилили? Теперь закруглите напильником углы дабы не порезаться и не задеть стоящий рядом с чипами детали. После окончания работы радиатор должен будет выглядеть примерно вот так:

    c7133574-62ba-454a-8244-27b3cdf3e3df-image.png

    Для приклеивания радиаторов к искомым чипам РасПи я использовал теплопроводный клей Arctic Cooling, но сразу скажу - либо мне попался бракованный образец либо он на самом деле состоит из 2-х компонентной термопасты - радиаторы после выдерживания необходимых 5 часов отказались держаться на РасПи и попросту отпали при попытке поставить платку боком. Поэтому фотография процесса склейки Арктик Кулом, а фактически я попросту приклеил радиаторы нанеся тонкий слой клея "Секунда" - мгновенно, сердито и очень опасно (клей проводит ток так что есть риск замкнуть пару-тройку ножек на микросхемах). Думаю если получится аккуратно снять радиаторы то попробую использовать АлСил-5, если опять подделку не подсунут.

    Итак - фото:

    Радиаторы

    d5e54b26-723b-451e-8103-d744dce5d99e-image.png

    Арктик Кул-овская ванночка для смешивания раствора и лопатка к ней.

    70b5a73d-1c53-4bd1-9520-0053426db86b-image.png

    Алхимическая и (как выяснилось) не исполняющая своих функций смесь.

    b1980ec0-ad32-4300-9adc-9de0e48bef97-image.png

    Нанесенный клей на чипах РасПи.

    99904134-f25c-4f88-8249-41ae38e41e9b-image.png

    А это уже приставленные радиаторы.

    3ce3f004-0a28-4d2c-9fc9-cbd2c49f83fb-image.png

    И еще парочка:

    4029ffe3-d274-48a1-9c7e-e98c50d4f9f9-image.png

    Итог: Ощутимо снизилась температура на ощупь, термопарой не проверял. Дорогой и хваленый Арктик Кул показал свою полную несостоятельность, а супер-клей "Секунда" - свою исключительную хваткость и цепкость.

    Спасибо за внимание, следующий блог будет посвящен моему самодельному корпусу из комплекта "Лего".!


  • DIY Case с активным охлаждением для Raspberry
    piP pi

    Я недавно писал о своём опыте использования пассивногоохлаждения для RPi. На этом приключения маленькой платы не закончились — была нужда сделать для неё корпус, главная "фишка" которого — встроенный кулер. Что из этого получилось?

    Что-то вот такое, маленькое и симпатичное, на мой взгляд (на фото показан корпус ещё без крепления с платой).

    b78cbad3-f9e5-4f4e-a827-45c6ebf9d63f-image.png

    Конструкцию корпуса я посмотрел в видео на YouTube.

    Мне очень понравилась такая модель тем, что она не наглухо закрытая (есть доступ к GPIO), простая в изготовлении и очень симпатичная. Ок, теперь думаем,что делать с охлаждением. От GPIO разъёмов можно с легкостью запитать пятивольтовый (иногда и 12-ти) кулер от какой-нибудь видеокарты, нетбука или любой другой небольшого размера.
    ddcf3f72-c529-4e34-8ec7-9b3c8a9e1188-image.png

    34889200-06c1-4bd9-9adf-e99ec3779a2c-image.png

    Соединяется всё очень просто: один провод кулера (обычно красный) мы подсоединяем к контакту 5V Power, а второй — к земле (Ground). Главное, не перепутать ничего, ибо это чревато убийством платы. Если всё ок, кулер заводится.
    07867b0c-8746-4014-883d-886c5157454e-image.png

    Под него в верхней части я сделал отверстие и прикрепил наверх. Получилось как-то так:

    1a2d9cb9-be54-4d80-ba99-0ec9a0767c9c-image.png

    Нижняя часть:

    b42d676b-4a2f-4f65-8dc7-48336822ce61-image.png

    И всё вместе:

    8388fd53-502c-4507-8aa1-80edcf0b85da-image.png

    Корпус почти готов. Осталось только сделать крепление для платы на нижней планке.Фото с моим креплением, к сожалению, нету. Так как у меня получилось эстетически не очень из-за вытекшего "из-под контроля" суперклея :)Самое интересное — замеры температуры. Привожу ниже таблицу замеров, аналогичную той, что я публиковал в прошлый раз. В скобках указаны замеры прошлых опытов, при наличии пассивного охлаждения. Результат говорит сам за себя.

    b0b95801-1c46-4ad5-98de-67718ac7f744-image.png

    Конечно, всё это скорее излишне, нежели необходимо. Но всё-таки, тем, у кого есть проблема перегрева платы, советую обратить внимание на такую простую в изготовлении и эффективную с точки зрения охлаждения конструкцию.Как обычно, полное описание процесса я описал в своём блоге — http://kspitfire.blogspot.ru/2013/03/blog-post.htmlУдачи в экспериментах с Raspberry!


  • Экономим порты (подключение кнопок по i2c)
    piP pi

    Как известно, портов много не бывает. По этому жалко их тратить на подключение банальных кнопок. Особенно когда кнопок много.

    Все уже придумали до нас. I2c шина позволяет подключить до 120 устройств потратив на это всего 2 пина на RPi.

    Тем более, что есть отличная вешь: PCF8574 (PCF8575). Дистанционный 8-битный расширитель ввода – вывода I2C-шины на 8(16) портов соответственно. Вот к нему то мы и будем цеплять кнопки.

    3af4d4b4-c3d3-4bc1-9653-9ced6e6b0bcc-image.png

    Буква А в маркировке определяет базовый адрес чипа.

    Буква 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()
    

    Вот, собственно и все.

    52eabd9b-4005-4046-9978-6926c791459d-image.png


  • Raspberry Pi Zero v1.3 и HATошилды для нее
    piP pi

    Вместе с обновлением официальной CSI-камеры обновилась и недавно вышедшая Raspberry Pi Zero до версии 1.3. В новой версии к Zero добавился порт для подключения камеры. К сожалению существующие кабели не подходят и для "Нулевой" малинки потребуется докупить специфичный для нее кабель. Я же решил собрать под катом небольшой обзор доступных для нее "mini" HAT- и не HAT-шилдов, а также добавил в конец статьи небольшую подсказку, как отслеживать появление малинки в магазинах.

    6ecdfa28-13dc-4d18-8493-272370b8055c-image.png

    Не говоря о всяких протоHATов, первыми в дело HATостроения для новой малинки подключились предприимчивые люди, для которых ограничение в один usb-порт и отсутствие возможности использовать Ethernet-кабель оказалось критическим. Сначала появился мануал, как с помощью паяльника, старого usb-хаба, 4-х проводков и 2-х резинок сделать рабочий малинохаб, а затем уже подоспели и более совершенные версии хабов, не использующие паяльник. Секрет в том, что такой хаб подключается с нижней стороны малинки к ее тестовым пинам с помощью 4-х штырьков, имитирующих собой провода из указанного мануала. Грубо говоря эти usb-хабы нельзя назвать HAT, так как они никак не занимают GPIO пины и не сообщают малинке свои данные, что требуется стандартом.

    Вот некоторые из таких хабов:

    Первым идет USB SHOE, получивший 23 марта 4,384 евро на Кикстартере. На Хабе расположенны 2 обычных usb и 1 micro usb. Кстати, один из usb имеет очень интересное расположение. "Внутренний" usb, как его называет создатель хаба,

    908e93ed-fd87-4ffa-bd76-47e174d61ab4-image.png

    предназначен для устройств с очень маленькими размерами, например вот такого маленького wifi-адаптера:

    5a4889a9-18c6-4852-968f-9e35654ed8df-image.png

    Стоимость хаба начиналась с 25 евро. К сожалению на сайте своего создателя он так и не засветился, так что я не в курсе, где его можно сейчас взять.

    Еще один представитель семейства usb-хабов для "нулевой" малинки по имени Hubpixed также был успешно "закикстарчен" 13 марта с 3,194 долларов. От предыдущего собрата он отличается 4-мя "обычными" usb портами, низкой ценой(8$) а также свободным доступом к GPIO малинки. Метод подключения тот же. Сейчас на Кикстартере идет сбор средств на вторую версию хаба, HubPiWi, где один из usb-портов заменен на платку с wi-fi.

    9e81c906-3a23-4993-b7eb-ff351bccd0a8-image.png

    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 и может работать не только с "нулевой" малинкой, но и со старшими братьями. К слову на плате имеется разъем для внешней антенны.

    274b850b-e106-418d-96f3-716ce78d93bd-image.png

    Цена вопроса 11$.

    Я бы с радостью еще рассказал и о других платах, например о монструозном CRAB'е, добавляющим к малинке порты композитного видео, аудио и VGA, о не прошедшем Кикстартер PiJack'е, добавляющем EthernetRJ45-разъем и о многом другом. Но тогда вам пришлось бы слишком долго листать до сюда, чтобы узнать, как отслеживать появление малинки в магазинах. 🙂

    На самом деле её можно купить все в тех же официальных магазинах, указанных на офсайте. Но секрет не в этом. Дело в том, что Артур Алвес (Arthur Alves) как-то очень хотел купить себе "Нулевую" малинку. Проверять каждые пять минут странички всех официальных магазинов было нудно, а брать у перекупщиков на ebay было слишком дорого. Тогда он решил написать скрипт, который сам бы проверял странички всех официальных магазинов и оформил сайт под этот скрипт. Теперь любой может проверить наличие "нулевой" малинки в магазинах просто зайдя на его сайт WhereIsMyPiZero.com

    0dfee83a-9b5b-4258-9bc7-260de97c9e3b-image.png

    PS Пара слов о магазинах. В Россию доставляет только Pi Suply, но стоимость единственного варианта Pi Zero в виде комплекта "Zero + кабели" в 13 фунтов + 9 фунтов доставка убивает с одного взгляда. Adafruit не доставляет ни только в Россию, но и на все известные мне MF-адреса. Я заказывал с PiHut с доставкой в США на MF-адресс, взятый с shopotam.ru. 4£ малинка + 4£ доставка в США + 3$ добавление MF-посылки в упаковку + 11$ доставка до России ~= 1700 р. Доставка с MF-адресса MainBox'a могла бы сэкономить еще 400 р., но я вспомнил о них слишком поздно.


  • Raspberry Pi Zero как USB устройство.Часть 2.Ethernet.
    piP pi

    Вторая статья из цикла про превращение Raspberry Pi Zero в USB Gadget.
    Первая статья

    Часть 2.Ethernet и выход в интернет.

    Внимание! Автор публикации не несет ответственности за ваши действия!Данная статья является переводом c некоторыми дополнениями

    Когда Raspberry Pi Zero вышла, одним из минусов было отсутствие USB A. Чтобы что-то подключить необходимо использовать USB OTG переходник.

    По умолчанию, PiZero USB хост, а мы сделаем из нее устройство

    Заинтересованные люди на GitHub выясняли, что если использовать драйвер USB DWC2, и заменить некоторые файлы, вы можете получить Pi, работающую как устройство USB.

    Раздел 2.Ethernet.
    Нам прежде всего понадобятся прямые руки ,хоть какой нибудь опыт.
    Запишите по новой Rasbian Jessie Lite (или просто Jessie) на SD — карту 4G или 8G.
    Припаять штырьки 2x20 типа ПАПА-ПАПА к GPIO или подключится через USB TTL к Pi Zero.
    Хороший мануал по USB TTL написал raspiman ССЫЛКА

    Ethernet гаджет немного сложнее настроить, но это более нужно, потому что вы сможете использовать VNC, SSH ,FTP и т.д.

    Шаг 0. Скачать новый пакет ядра

    Загрузите следующий файл на вашем пк: клик, и переименуйте его в gadgetkernel.tgz

    Шаг 1. Скопируйте новое ядро ​​на SD-карту

    Скопируйте файл из предыдущего шага в раздел BOOT SD карты с дистрибутивом.

    512e8c37-fe6f-455c-a1d0-7c246f20e9ce-image.png

    Шаг 2. Войдите в Pi Zero

    Вставьте SD в ваш Pi Zero, подключите USB TTL, включите Pi и войдите в консоль через USB.

    Шаг 3. Распаковка новое ядро

    Распакуйте и установите ядро из .tgz файла

    Выполните следующие команды:

    cd ~
    sudo mv /boot/gadgetkernel.tgz .
    tar -xvzf gadgetkernel.tgz
    

    b5e2a4a9-f8b2-4e95-a1a0-1c75febae75f-image.png

    Шаг 4. Резервное копирование и установка нового ядра

    sudo mv tmp/boot/kernel.img /boot
    

    Шаг 5. Установка модуля

    sudo mv tmp/boot/overlays/* /boot/overlays
    sudo mv tmp/boot/*dtb /boot
    sudo cp -R tmp/boot/modules/lib/* /lib
    

    Шаг 6. Настройка модулей и перезагрузка

    Теперь мы скажем Малинке о том, что хотим режим g_ether

    sudo nano /etc/modules
    

    И приводим все к виду как на скриншоте снизу, затем сохраняем файл

    25ea3e00-2ec9-4be2-86ee-a8e3fe959307-image.png

    Выключаем малинку командой

    sudo halt
    

    Отсоединяем все питание, которое было присоединено к Pi Zero и вставляем кабель как на фотографии ниже, теперь она будет получать питание через USB порт, который раньше был USB OTG

    0eb0a9d2-443a-41ee-b122-da300f857702-image.png

    Пожалуйста будьте внимательны, иначе рискуете сломать вашу Pi Zero.

    Теперь вы можете войти и проверить , что у вас есть новое сетевое устройство под названием usb0

    sudo ifconfig -a

    4b66474f-53a2-4f00-b285-304280047bbc-image.png

    Попробуйте подключить Pi Zero в ваш компьютер прямо. Например, на Windows, мы подключили его

    d2234f83-58c3-4a95-ac6e-ac9ce1f99c40-image.png

    Можно заметить,что ip адрес выдался автоматически,но лучше сделать статический ip.

    sudo nano /etc/network/interfaces
    

    и добавим в конец файла конфигурацию,который следует изменить согласно вашим настройкам сети

    allow-hotplug usb0
    iface usb0 inet static
            address 192.168.7.2
            netmask 255.255.255.0
            network 192.168.7.0
            broadcast 192.168.7.255
            gateway 192.168.7.1
    

    Сохраняем файл и затем выполним

    sudo ifdown usb0 
    sudo ifup usb0
    ifconfig usb0
    

    Проверим правильность конфигурации

    13f0191a-3927-49a2-978e-8c3dde081f85-image.png

    Шаг 7.Установка драйверов.

    В Windows при подключении устройства сразу начнется установка драйвера
    eb6e4a05-ad12-4378-92a1-794a86d770df-image.png

    Проверим правильность установки драйверов и что Zero определилась как Ethernet устройство
    a3b52c11-b472-4063-9ce4-e72a6d6af8e5-image.png

    Откройте "Центр управления сетями и общим доступом" и измените параметры адаптера

    8582ba3d-ca84-4976-8733-a06618e8b13b-image.png

    Переименуем в PiZero

    1fd85b4a-67ee-4fad-9668-3426457e62a2-image.png

    Перейдем во вкладку свойства

    a358d5b8-4f14-4b00-88f5-24db64fbe548-image.png

    Выберем протокол IPv4

    f8d82bcf-28b1-49e6-9b68-b39922c5ccb5-image.png

    Вводим те же данные,что и в шаге 6
    be5ce34e-36a9-4b52-b4b6-475cf7bf3a24-image.png

    и сохраним эту конфигурацию.

    Теперь после переподключения Pi Zero все должно получится и у нее появился интернет с нашего ПК.

    На этом все,по всем вопросам в комментарии.

  • 1
  • 2
  • 3
  • 4
  • 5
  • 313
  • 314
  • 3 / 314
  • Войти

  • Нет учётной записи? Зарегистрироваться

  • Login or register to search.
  • Первое сообщение
    Последнее сообщение
0
  • Категории
  • Главная
  • Документация
  • Последние
  • Пользователи