На Orange Pi PC можно установить образ Raspbian, есть на сайте апельсинов, но это ничего не даст — будет выглядеть один в один, но много нужного не будет работать — потому что не малинка вообще никак — да и проблема с включением модулей в ядре тоже по этой причине!
Так что будем ставить образ вот от этого чувака, loboris еще раз фенкс, тем более обещает, что все нам нужное включено в ядре — GPIO, i2c (TWI), SPI enabled
Эту статью можно считать продолжением вот этой http://www.itcooky.com/?p=3925
Качаем OrangePI-PC_Ubuntu_Vivid_Mate.img
Далее, все просто, если у вас например Ubuntu (да пусть у вас будет Ubuntu) вставляете карту памяти форматируете её в ноль например Gparted.
Далее заливаете имадж (предварительно его разархивировав конечно же).
sdd — это карта памяти, у вас может быть другая, осторожней с этим.
в папке с имаджем запускаем команду
sudo dd if=OrangePI-PC_Ubuntu_Vivid_Mate.img of=/dev/sdd bs=1M oflag=direct
После первой загрузки надо выполнить
sudo fs_resize
sudo rm /usr/local/bin/fs_resize_warning
Выбираем свой часовой пояс
sudo timedatectl set-timezone Europe/Moscow
посмотреть из чего можно выбрать
timedatectl list-timezones
И после каждого ребута ставим время(очень важно)(пока часы не прикрутили)
месяцденьчасминутагодточкасекунды
date 101219152015.33
Исправляем ошибку по которой не резолвитца хост OrangePI
прописываем в
vi /etc/hostname
текст
Opelsinka
а в
vi /etc/hosts
текст
127.0.0.1 Opelsinka ::1 Opelsinka ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters
В файле
vi /etc/network/interfaces
оставлем только текст
allow-hotplug eth0 iface eth0 inet dhcp
Подключение жк-дисплея к Orange Pi PC
Покупал вот это Особое! Жк-дисплей модуль синий экран IIC / I2C 1602 жк-дисплей за 196.56 RUR.
Брал две штуки — одна нормальная, вторая криво припаяна. На плате YwRobot есть синий регулятор контраста (как мне кажется) регулирует фигово буквы проявляются(именно так это выглядит) только в крайнем положение. Есть джампер для включения голубой подсветки — непонятно за чем он, потому что без подсветки на этом экране ничего не видно!!! Подсветка неровная пятнами.
Внимательно: Выбирайте положение экрана при закреплении, у него есть верх и низ. И повернуть кодом на 180 градусов его не удасться.
Подключаем как есть, одно к другому
Я уже говорил что инструкции от Raspberry Pi подходят, вот берем эту инструкцию http://devram0.blogspot.ru/2014/09/raspberry-pi-ywrobot-arduino-lcm1602.html
Обновим репозиторию и установим git
sudo apt-get update && sudo apt-get install git-core
иии…
sudo apt-get make
sudo apt-get gcc
sudo apt-get vim
cd /root
sudo git clone https://github.com/wargio/liblcm1602.git
cd liblcm1602
make
Хотя make еще рано делать
Смотрим где у нас в i2c висит жк
sudo i2cdetect -y 1
пусто
sudo i2cdetect -y 0
есть
открываем все файлы с расширением .c
vi example2.c
и меняем в строке
i2c_dev = open_i2c(I2C_FILE_NAME, 0x3f);
0x27 на 0x3f
самый нужный нам скрипт example2 выглядеть вот так
#include <stdio.h> #include <string.h> #include "i2c.h" #include "lcd.h" #define I2C_FILE_NAME "/dev/i2c-0" int main(int argc, char **argv){ int i2c_dev, i; lcd lcd0; i2c_dev = open_i2c(I2C_FILE_NAME, 0x3f); if(i2c_dev <0){ printf("Errore: %d\n", i2c_dev); return 1; } lcd_init(&lcd0, i2c_dev);//, 16); lcd_clear(&lcd0); for(i=1; i<3 && i<argc; ++i) lcd_print(&lcd0, argv[i], strlen(argv[i]), i-1); close_i2c(i2c_dev); return 0; }
делаем
make
и пробуем
./example2 "First STR" "Second STR"
Теперь будем показывать на экране время(не очень нужно) и наш локальный IP (очень нужно если использовать без монитора HDMI и получать IP по DHCP)
Делаем скрипт
vi timeip.sh
вставляем туда строки
#!/usr/local/bin/bash t=`/bin/date +%Y"."%m"."%d"-"%H":"%M` ip=`/sbin/ifconfig|/bin/grep inet|/usr/bin/head -1|/bin/sed 's/\:/ /'|/usr/bin/awk '{print $3}'` /root/liblcm1602/example2 ${t} ${ip}
делаем его исполняемым
chmod +x timeip.sh
Надо помнить что длина строки на экране 16 символов, как раз хватает на IP
Ставим запускать по рассписанию
crontab -e
каждую минуту
*/1 * * * * /bin/sh /root/timeip.sh
Вот так это пока выглядит внутри
Моргание лампочкой
Классика — первым делом надо поморгать! Тут очень кстати появился работающий способ вот по это ссылке https://github.com/zhaolei/WiringOP
sudo git clone http://github.com/zhaolei/WiringOP.git -b h3
Если ругается на сертификат выставите правильное время
cd WiringOP
chmod +x ./build
sudo ./build
запустим и посмотрим
gpio readall
Вот где IO это рабочии выводы — и они идут не по порядку (и не все работают)
и попробуем что-то запустить
cd examples
vi blink.c
доводим до такого вида
#include <stdio.h> #include <wiringPi.h> // LED Pin - wiringPi pin 0 is BCM_GPIO 17. #define LED 1 int main (void) { printf ("Raspberry Pi blink\n") ; wiringPiSetup () ; pinMode (LED, OUTPUT) ; for (;;) { digitalWrite (LED, HIGH) ; // On delay (500) ; // mS digitalWrite (LED, LOW) ; // Off delay (500) ; } return 0 ; }
главне чтобы #define LED был 1, потому что 0 не работает
делаем
make blink
и запускаем — будем моргать пока не остановим, причем лампочка останется в прерваном состоянии
./blink
Подключаем часы реального времени DS3231 RTC
Это должно было быть самым простым и понятным подключением… если бы часы работали, и инструкции из интернета тоже!!!
Брал вот эти часики AT24C32 IIC модуль точность часов реального времени модуль памяти ( с нашими battary ) никаких батарей к ниему не прилагается — подходят 2032 и 2025 (другие не пробовал)
В интернете встречаются инструкци где советуют пару резисторов сразу отодрать http://www.raspberrypi-spy.co.uk/2015/05/adding-a-ds3231-real-time-clock-to-the-raspberry-pi/ отдрал я один — нет — ни на что не повлияло!!!
SDA SCL оказались такими портами к которым можно подключать куча всего паралельно к одному усику. Вот схема, часы питаются от 5V:
Начну сразу с конца
добавляем строки в
vi /etc/rc.local
вот эти перед exit 0
sudo echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device sudo hwclock -s -f /dev/rtc1
Ребутимся и все сразу работает! Теперь подробно:
Почему 0x68
потому что комманда
sudo i2cdetect -y 0
показывает что он там
sudo: unable to resolve host OrangePI 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3f 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
Почему i2c-0
Потому же почему и предыдущий ответ
Почему sudo hwclock -s -f /dev/rtc1
А вот это интересно. На Orante Pi Pc уже есть часы реального времени sunxi-rtc, вот они виднеются
dmesg | grep rtc
вот
[ 3.704954] sunxi-rtc sunxi-rtc: rtc core: registered sunxi-rtc as rtc0 [ 4.494669] sunxi-rtc sunxi-rtc: setting system clock to 1970-01-01 00:00:10 UTC (10) [ 21.429859] rtc-ds1307 0-0068: rtc core: registered ds1307 as rtc1 [ 21.429883] rtc-ds1307 0-0068: 56 bytes nvram
И они не работают(не считают время, сбрасывают после повер оф), и они rtc0, и hwclock как его не ковыряй тупо регаирует на них. А наши часики на rtc1
Поэтому команду установить системное время мы делаем указав у кого это время брать
sudo hwclock -s -f /dev/rtc1
Команда посмотреть время
sudo hwclock -r -f /dev/rtc1
Команда записать в часы системное время
sudo hwclock -w -f /dev/rtc1
Подключаем датчик температуры и влажности DHT22 или DHT11
Тут я понял, что все инструкции написанные для Рмалинки на python, не работают на Опельсинке! А вот на си плюс да! Хотелось бы его конечно знать, но…
Беру с этого сайта код http://www.uugear.com/portfolio/read-dht1122-temperature-humidity-sensor-from-raspberry-pi/ и вставляем его, сначала делая папку
mkdir /root/DHT
cd /root/DHT
vi dht.c
текст
/* * dht.c: * read temperature and humidity from DHT11 or DHT22 sensor */ #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define MAX_TIMINGS 85 #define DHT_PIN 4 /* GPIO-22 */ int data[5] = { 0, 0, 0, 0, 0 }; void read_dht_data() { uint8_t laststate = HIGH; uint8_t counter = 0; uint8_t j = 0, i; data[0] = data[1] = data[2] = data[3] = data[4] = 0; /* pull pin down for 18 milliseconds */ pinMode( DHT_PIN, OUTPUT ); digitalWrite( DHT_PIN, LOW ); delay( 18 ); /* prepare to read the pin */ pinMode( DHT_PIN, INPUT ); /* detect change and read data */ for ( i = 0; i < MAX_TIMINGS; i++ ) { counter = 0; while ( digitalRead( DHT_PIN ) == laststate ) { counter++; delayMicroseconds( 1 ); if ( counter == 255 ) { break; } } laststate = digitalRead( DHT_PIN ); if ( counter == 255 ) break; /* ignore first 3 transitions */ if ( (i >= 4) && (i % 2 == 0) ) { /* shove each bit into the storage bytes */ data[j / 8] <<= 1; if ( counter > 16 ) data[j / 8] |= 1; j++; } } /* * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte * print it out if data is good */ if ( (j >= 40) && (data[4] == ( (data[0] + data[1] + data[2] + data[3]) & 0xFF) ) ) { float h = (float)((data[0] << 8) + data[1]) / 10; if ( h > 100 ) { h = data[0]; // for DHT11 } float c = (float)(((data[2] & 0x7F) << 8) + data[3]) / 10; if ( c > 125 ) { c = data[2]; // for DHT11 } if ( data[2] & 0x80 ) { c = -c; } float f = c * 1.8f + 32; printf( "Humidity = %.1f %% Temperature = %.1f *C (%.1f *F)\n", h, c, f ); }else { printf( "Data not good, skip\n" ); } } int main( void ) { printf( "Raspberry Pi DHT11/DHT22 temperature/humidity test\n" ); if ( wiringPiSetup() == -1 ) exit( 1 ); while ( 1 ) { read_dht_data(); delay( 2000 ); /* wait 2 seconds before next read */ } return(0); }
И собираем, с командой как на сайте не соберется, а вот с этой соберется
gcc -pthread -odht dht.c -L/usr/local/lib -lwiringPi
и запускам
sudo ./dht
работает каналья
sudo: unable to resolve host OrangePI Raspberry Pi DHT11/DHT22 temperature/humidity test Data not good, skip Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Data not good, skip Data not good, skip Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Data not good, skip Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Data not good, skip Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Data not good, skip Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Humidity = 33.0 % Temperature = 24.0 *C (75.2 *F) Data not good, skip Data not good, skip
Схема подключения: использовал 5V и 4-тый GPIO, — вот все вместе
Программа Fritzing — бесплатная программа для рисоваия электронных схем — конечно невероятное ГАВНО. Ни с одной заявленной функцией оно не справляется. Если с частями, которые уже есть в программе, можно что-то нарисовать, то добавить своих и сделать что-то просто невозможно. Как мне удалось эскиз Orange Pi Pc туда добавить — непонимаю!!!
Что бы уместить всё в корпус надо перерисовать всю схемку и уместить всё на двух макетках 5 на 11, но — смотри комментарий выше — да ладно без схемки и так понятно! Тут главное взять надо нано хлебныедоски (а, что? а вы их как называете?). Брал вот эти http://ru.aliexpress.com/item/7PCS-Mini-55-Tie-point-Breadboard-Solderless-Prototype-Test-Board/32382692429.html
И вот так все выглядит в самодельном корпусе за 35 рублей — скромненько, практично!
UPD: Чтобы обозначенная конфигурация, или даже компоновка, обрела законченный смысл сделаем так чтобы следующее работало так — на экран выводится время и IP, через 30 скунд показывает температура и влажность, при обновлении экрана мигает лампочка.
Для начала модифицируем скрипт выдаюший влажность и темпераутуру, чтобы он выдавал одной строкой цифры влажности и темпы.
Создаем скрипт
cd ./DHT
vi dht2.c
Вставляем туда, зедсь все также как на верху только лишнее убрато
/* * dht.c: * read temperature and humidity from DHT11 or DHT22 sensor */ #include <wiringPi.h> #include <stdio.h> #include <stdlib.h> #include <stdint.h> #define MAX_TIMINGS 85 #define DHT_PIN 4 /* GPIO-22 */ int data[5] = { 0, 0, 0, 0, 0 }; void read_dht_data() { uint8_t laststate = HIGH; uint8_t counter = 0; uint8_t j = 0, i; data[0] = data[1] = data[2] = data[3] = data[4] = 0; /* pull pin down for 18 milliseconds */ pinMode( DHT_PIN, OUTPUT ); digitalWrite( DHT_PIN, LOW ); delay( 18 ); /* prepare to read the pin */ pinMode( DHT_PIN, INPUT ); /* detect change and read data */ for ( i = 0; i < MAX_TIMINGS; i++ ) { counter = 0; while ( digitalRead( DHT_PIN ) == laststate ) { counter++; delayMicroseconds( 1 ); if ( counter == 255 ) { break; } } laststate = digitalRead( DHT_PIN ); if ( counter == 255 ) break; /* ignore first 3 transitions */ if ( (i >= 4) && (i % 2 == 0) ) { /* shove each bit into the storage bytes */ data[j / 8] <<= 1; if ( counter > 16 ) data[j / 8] |= 1; j++; } } /* * check we read 40 bits (8bit x 5 ) + verify checksum in the last byte * print it out if data is good */ if ( (j >= 40) && (data[4] == ( (data[0] + data[1] + data[2] + data[3]) & 0xFF) ) ) { float h = (float)((data[0] << 8) + data[1]) / 10; if ( h > 100 ) { h = data[0]; // for DHT11 } float c = (float)(((data[2] & 0x7F) << 8) + data[3]) / 10; if ( c > 125 ) { c = data[2]; // for DHT11 } if ( data[2] & 0x80 ) { c = -c; } // float f = c * 1.8f + 32; printf( "%.1f %.1f\n", h, c); exit(1); }else { /* printf( "Data not good, skip\n" ); */ } } int main( void ) { /* printf( "Raspberry Pi DHT11/DHT22 temperature/humidity test\n" ); */ if ( wiringPiSetup() == -1 ) exit( 1 ); while ( 1 ) { read_dht_data(); delay( 20 ); /* wait 2 seconds before next read */ } return(0); }
компилируем
gcc -pthread -odht dht.c -L/usr/local/lib -lwiringPi
проверяем
./dht2
нормуль
21.0 33.0
Теперь снимаем данные и пишим в лог файл
cd /root
vi htmon.sh
вставляем код
#!/usr/local/bin/bash d=`/root/DHT/dht2` t=`/bin/date +%Y"."%m"."%d"-"%H":"%M" "` /bin/echo ${t}${d} >> /var/log/mon.log
делаем
chmod +x htmon.sh
будем запускать раз в минуту
crontab -e
вставляем
*/1 * * * * /root/htmon.sh
также меняем скрипт моргания
cd /root/WiringOP/examples
vi blink.c
доводим до вида
#include <stdio.h> #include <wiringPi.h> // LED Pin - wiringPi pin 0 is BCM_GPIO 17. #define LED 1 int main (void) { // printf ("Raspberry Pi blink\n") ; wiringPiSetup () ; pinMode (LED, OUTPUT) ; // for (;;) // { digitalWrite (LED, HIGH) ; // On delay (200) ; // mS digitalWrite (LED, LOW) ; // Off // delay (500) ; // } return 0 ; }
собираем
make blink
Радактируем основной скрипт который уже запускает раз в минуту
vi /root/timeip.sh
и доводим его до вида
#!/usr/local/bin/bash t=`/bin/date +%Y"."%m"."%d"-"%H":"%M` ip=`/sbin/ifconfig|/bin/grep inet|/usr/bin/head -1|/bin/sed 's/\:/ /'|/usr/bin/awk '{print $3}'` /root/WiringOP/examples/blink /root/liblcm1602/example2 ${t} ${ip} sleep 30 h=`/root/DHT/dht2 | /usr/bin/awk '{print $1}'` th=`/root/DHT/dht2 | /usr/bin/awk '{print $2}'` /root/WiringOP/examples/blink /root/liblcm1602/example2 "${t}" "H:${h}% T:${th}C"
всё
UPD: Подключаем Wi-Fi USB
Кто-то сказал что RTL 8188EUS работает — сразу прикупил вот этот Мини USB адаптер wi-fi RTL 8188EUS Comfast CF-WU810N-1 adaptador беспроводная точка доступа wi-fi USB WiFi ключ adaptador WiFi USB вроде как у производителя… Дошло быстро в конверте, обычно такие коныверты даже не приходится додоставлять от «Почты России» до дома — сразу кидают в почтовый ящик (но мне пришлось сходить!)
Подключается простым вставлениям в USB
Посмотреть подклюбчился ли он можно командой
lsusb
вот он под нумером 3
Bus 008 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 003: ID 0bda:8179 Realtek Semiconductor Corp. Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Как мне показалось в этом образе есть все нужное уже
Комманда показать модули
lsmod
должна показать
Module Size Used by 8188eu 901509 0
устанавливаем нудные утилиты
sudo apt-get install wireless-tools
работают команды
iwconfig
и показать окрестные сети
iwlist wlan1 scan
но этой утилиты мало для подключения к WEP2 — то есть она только может к WEP
вот так
sudo iwconfig wlan1 essid Nameseti key s:parolbukwami
Ставим если не стоит вот это
sudo apt-get install wpasupplicant
Записываем пароль и имя к сети к которой собираем подключаться особым образом
wpa_passphrase MYWIFINAME mypassword > /etc/wpa2.conf
в файле получаем такой текст
network={ ssid="ssid_name" #psk="password" psk=39fg94hg943hg94h5g9h34gh43hg429hgerhg }
редактируем чтобы текст был таким
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="ssid_name" #psk="password" psk=39fg94hg943hg94h5g9h34gh43hg429hgerh proto=RSN key_mgmt=WPA-PSK pairwise=CCMP group=CCMP auth_alg=OPEN }
RSN — потому что WEP2 у меня сеть
CCMP — потому что AES у меня шифрование сети
Чтобы подключалось автоматом добавляю в файл
vi /etc/network/interfaces
текст
allow-hotplug wlan1 iface wlan1 inet dhcp wpa-conf /etc/wpa2.conf iface default inet dhcp
Перегружаемся и все рабоатет
Теоретически можно подключаться с консоли (я на это убил часа 3 — а надо было всего лишь перегрузиться)
коммандой которая уйдет в фоновый режим
sudo wpa_supplicant -Dwired -B -iwlan1 -c/etc/wpa2.conf
или с полным дебагом
sudo wpa_supplicant -Dwired -dd -iwlan1 -c/etc/wpa2.conf
да тут надо еще угать с драйевром в -D
Шикарная статья! Где ты раньше был?!
Сам удивляюсь, как я этого GIPO раньше не замеча!л
Уважаемый Александр, делаю все по вашему уроку, после подключения lcd к пинам по команде i2cdetect -y 1 или i2cdetect -y 0 ничего не находит! Помогите пожалуйста!
Моя ошибка, исправил, в example2.c другой код должен быть
Пробовал подключить дисплей. Возникла беда. Все скомпилилось, но без sudo не запускается. Так же не всегда выводит на экранчик все. В чем может быть проблемма?
я все делал по SSH под рутом
Не совсем понятно зачем дисплей. Речь идет о локальном ip. Так-что скорее всего есть доступ к админке роутера а значит и к списку подключенных к нему устройств.
Экран удобно показывает какой IP сейчас, особенно в гостевой сети если
Здравствуйте подскажите как правильно прописать текст в
«vi /etc/rc.local
вот эти перед exit 0
sudo echo ds1307 0x68 > /sys/class/i2c-adapter/i2c-0/new_device
sudo hwclock -s -f /dev/rtc1»
для часов? не получается захожу в файл редактирую, начинаю сохранять не получается, что может быть не так? Спасибо
Надо это делать под пользоватпелем root (пароль тоже orangepi). Я все настраивал по ssh под root
Доброго дня! подскажите, пожалуйста, почему такие ошибки?
root@orangepi:~# make blink
cc blink.c -o blink
/tmp/ccaq9V7x.o: In function `main’:
blink.c:(.text+0x10): undefined reference to `wiringPiSetup’
blink.c:(.text+0x1c): undefined reference to `pinMode’
blink.c:(.text+0x28): undefined reference to `digitalWrite’
blink.c:(.text+0x30): undefined reference to `delay’
blink.c:(.text+0x3c): undefined reference to `digitalWrite’
blink.c:(.text+0x44): undefined reference to `delay’
collect2: ld returned 1 exit status
make: *** [blink] Error 1
я посмотрел в инете это какой-то линковщик не настроен что-ли…
я так понимаю он не находит методов, а они в библиотеках есть, значит библиотеки не подключаются?
Но WiringOP установлен? Попробуйте положить все его файлы в директорию с blink.c и заменить строку
#include
на
#include «wiringPi.h»
вчера заходил товарищ, который очень редко заходит и подсказал как решить проблему. 🙂
оказалось что компилировать нужно в моём случае так:
cc -lwiringPi blink.c -o blink
этот параметр (-lwiringPi) указывается в «note» после «установки» github.
Решил собрать на апельсинке роутер. Очень многое уже смог сделать, наткнулся на эту статью. Купил дисплей, описанный в статье, припаялся. Командой i2cdetect -y 0 получаю адрес UU. Вписываю его в example2.c, конец строки приобретает вид 0xUU. Делаю make и получаю ошибку:
example2.c: In function ‘main’:
example2.c:10:39: error: invalid suffix «xUU» on integer constant
i2c_dev = open_i2c(I2C_FILE_NAME, 0xUU);
Собственно и всё. Не хочет что-то взлетать.
Возможно, статья ещё не потерялась в тоннах интересностей и кто-нибудь мне поможет =)
В общем. У вас там на картинке SDA и SCL местами перепутаны и дисплей лучше на 5V посадить, тогда и регулятор будет работать нормально контраста.
А чтоб не светило дико в глаз подсветкой — можно припаять вместо перемычки подсветки на 4-5 кОМ резистор. Всё видно и не напрягает.
Спасибо!!!
А, вот еще. В скрипте первая строчка в большинстве случаев глючит. Если в нее послать hi и поставить sleep 1, то остальное начинает работать на ура.
В результате танцев с бубном получился невероятно информативный дисплей, который в сумме с gnokii smsd дает мощный инструмент управления без подключения внешнего дисплея. Ну и мониторинг состояния сервера.
Надо бы поправить саму статью, а то не все по коментам шастают.
Возможно не актуально.
На картинке SCL и SCA нужно поменять местами
TWI0-SDA 3я нога GPIO
TWI0-SCK 5z нога GPIO
VCC перенести с 1й ноги GPIO (3.3v) на 2ю или 4ю (VCC 5v) 16X2 завелся только после этого.
http://www.cnx-software.com/wp-content/uploads/2015/09/Orange_Pi_2_GPIO_Pinout.png
Непонятный косяк с отображением символов на экране. Бывает ничего не выводит бывает выводит крокозябры. Не уверен что виновата библиотека liblcm1602. Возможно нужно принудительно как то перевести в 4х битный режим т.е. использовать только 4 контакта из 8 D0-D7. Либо у меня убитый i2c модуль. Плохо разбираюсь в C/C++. Подтяжки к питанию по i2c шине вроде в порядке, 3.7v в режиме покоя. Осциллографом не смотрел до скольки просадка Подскажите кто сталкивался и как решили?
Извините, прочитал комментарии после написания сообщения. Если не у одного меня такие глюки то тут надо либо писать разрабу, либо переписывать/исправлять библиотеку самому, либо искать ей замену.
Спасибо.
В общем победил кривизну библиотеки i2c. переходом на python
вот тут описано как http://www.recantha.co.uk/blog/?p=4849 тут так же используется i2c шина.
Единственная неприятность с питоном это при обновлении информации гаснут все символы и печатаются строки вновь. Но это уже терпимо.
Здравствуйте.
Появляются такого рода ошибки.
cc -Wall -o dht dht.c -lwiringPi
……
dht.c:46:1: error: stray ‘302’ in program
dht.c:46:1: error: stray ‘240’ in program
dht.c:47:1: error: stray ‘302’ in program
/* shove each bit into the storage bytes */
…..
В чем может быть проблема?
Доброго времени суток. проблема такого рода: дисплей 20*4
подключил, показывает, но периодически при обновлении или нет изо или иероглифы.
при работе на плате ардуино — таких проблем нет. это исправить можно?
Видимо несовместим. Судя по этому видео все такие дисплеии работают просто надо только послыать правильно биты https://www.youtube.com/watch?v=hZRL8luuPb8
на 4pda пишут что и на 1602 тоже такие траблы проявляются.
попробовал запустить на orangepi Zero — ситуация не изменилась. раз через раз есть изо, потом пустой потом крякозябры и пустой и снова изо.. систематики в этом нет никакой. рекомендовали играться с параметром usleep(3) пробовал.. но как-то безрезультатно. попробую на днях библиотеку на питоне, может через нее что-то получится
провел эксперимент с дисплеем.
перешел на Armbian
если в ручном режиме выполняю:
./example2 «First STR» «Second STR»
все работает как часы
но только запускаю bash скрипт, все равно с какими значениями — начинаются либо крякозябры либо пустой экран.
беру отдельно строчку из скрипта с выводом инфо и стартую из консоли — пашет
пути пробовал прописать и полный и короткий
я в недоумении