29.07.2016, 10:04 | #1 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Openwrt+Arduino+LCD
Доброго всем, есть статья про DIR-320 + Freeduino: выводим системную информацию на LCD
Решил применить ее на своем wdr3500 Хоть и на сайтах мало инфы написано но скетч на ардуине смог перенастроить чтоб работало подключение lcd1602 по i2c шине Код:
#include <Wire.h> #include <LiquidCrystal_I2C.h> LiquidCrystal_I2C lcd(0x27,16,2); // Устанавливаем дисплей void ScreenSaver() { int i; lcd.clear(); lcd.setCursor(0,0); lcd.print(" >>>Openwrt<<< "); lcd.setCursor(0,1); lcd.print(" & Arduino "); delay(3000); lcd.clear(); for (i=0;i<8;i++) { lcd.setCursor(i,0); lcd.print("="); lcd.setCursor(16-i-1,0); lcd.print("="); delay(200); } lcd.clear(); } void setup(){ lcd.init(); lcd.backlight();// Включаем подсветку дисплея // устанавливаем параметры дисплея: lcd.begin(16, 2); // инициализируем последовательный порт: Serial.begin(9600); //здесь не забываем указать скорость вашего порта роутера } void loop() { char s; if (Serial.available()) { delay(100); while (Serial.available() > 0) { s=Serial.read(); if (s=='^') { switch (Serial.read()) { case '1': lcd.setCursor(0,1); Serial.read(); break; case '0': lcd.setCursor(0,0); Serial.read(); break; case 'c': lcd.clear(); Serial.read(); break; case 's': Serial.read(); ScreenSaver(); break; } //switch } else { // Выводим каждый символ на LCD lcd.write(s); } } } } Код:
#!/bin/sh port="/dev/tts/0" lcdWrite() { #Вывод на экран echo -n "^"${1}:$2 > $port } lcdClear() { #Очистка экрана echo -n "^c:" > $port } lcdScreenSaver() { #Запуск заставки echo -n "^s:" > $port } WidgetLoad() { #Отображение загрузки процессора s=`/usr/bin/uptime` s2=":" for i in 1 2 3 4 5 6 do #Удаляем всё лишнее до последнего двоеточия n=`expr index "$s" "$s2"` s="${s:$n}" done s="${s:1}" #Удаляем первый символ (пробел) lcdClear lcdWrite 0 "Load CPU" lcdWrite 1 "$s" } WidgetWiFiClientsCount() { #Виджет, показывающий количество подключенных WiFi клиентов s=`wl assoclist | wc -l` lcdClear lcdWrite 0 "Wi-Fi Clients" lcdWrite 1 "$s" } WidgetUptime() { #Аптайм роутера s=`/usr/bin/uptime` s2="l" n=`expr index "$s" "$s2"` n=`expr $n - 3` s="${s:0:$n}" s2="u" n=`expr index "$s" "$s2"` n=`expr $n + 2` s="${s:$n}" lcdClear lcdWrite 0 "Uptime" lcdWrite 1 "$s" } WidgetRAM() { #Свободная память set `cat /proc/meminfo | grep "Mem:"` n=`expr $4 + $6 + $7` p=`expr 100 '*' $n / $2` n=`expr $n / 1024` lcdClear lcdWrite 0 "FreeRAM" lcdWrite 1 "$n Kb ${p}%" } WidgetHDD() { #Свободное место в /opt set `df | grep "/opt"` p=`expr 100 '*' $3 / $1` n=`expr $3 / 1024` lcdClear lcdWrite 0 "Free HDD" lcdWrite 1 "$n Mb ${p}%" } WidgetDateTime() { #Дата и время set `date` lcdClear lcdWrite 0 "$3 $2 $6" lcdWrite 1 "$4" } #Main script while [ : ] do WidgetRAM sleep 3 WidgetLoad sleep 3 WidgetUptime sleep 3 WidgetWiFiClientsCount sleep 3 WidgetHDD sleep 3 WidgetDateTime sleep 3 done ./lcdduino.sh: line 103: can't create /dev/tts/0: nonexistent directory и соответсвенно задумка с подключением разбивается как стекло. Хоть я и не такой чайник но как понял дело в каком-то порте. Прошу помощи у форумчан решить мою проблемку=) |
29.07.2016, 12:49 | #2 | |
Senior Member
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989 |
Re: Openwrt+Arduino+LCD
Цитата:
Глянь в папке /dev Последний раз редактировалось sakatgg; 29.07.2016 в 12:53. |
|
29.07.2016, 13:10 | #3 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
root@OpenWrt:~# ls /dev
autofs mtd3ro ptmx ttyS2 btrfs-control mtd4 pts ttyS3 bus mtd4ro random ttyS4 console mtd5 sda ttyS5 cpu_dma_latency mtd5ro sda1 ttyS6 full mtdblock0 sda2 ttyS7 fuse mtdblock1 shm ttyS8 kmsg mtdblock2 snd ttyS9 log mtdblock3 tty ttyUSB0 mem mtdblock4 ttyS0 urandom mtd0 mtdblock5 ttyS1 usbmon0 mtd0ro net ttyS10 usbmon1 mtd1 network_latency ttyS11 usbmon2 mtd1ro network_throughput ttyS12 watchdog mtd2 null ttyS13 zero mtd2ro port ttyS14 mtd3 ppp ttyS15 |
29.07.2016, 13:18 | #4 | |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
изменил на экране 0 а в консоле при старте скрипта
Цитата:
|
|
29.07.2016, 13:58 | #5 | |
Senior Member
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989 |
Re: Openwrt+Arduino+LCD
Цитата:
Попробуй вывод команды echo "Hello, world!" > /dev/ttyS0 на экран |
|
29.07.2016, 14:42 | #6 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
команда выполняется но на экране пусто
|
29.07.2016, 14:44 | #7 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
хотя если через консол компорта в ардуине сдк подать таки команды
^c: — очистить дисплей ^0:text — вывести text на первой строке ^1:text — вывести text на второй строке ^s: — вывести небольшую заставочку на экране отображается результат |
29.07.2016, 14:54 | #8 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
опа па кажись нашел ошибку у чувака была ардуинка самодельная и там контакты rx tx местами переставлены))
остаеться вопрос кто навести порядок в скрипте чтоб ошибки не возникали,? |
29.07.2016, 15:22 | #9 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
подключение рабочее |
29.07.2016, 15:23 | #10 |
Member
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0 |
Re: Openwrt+Arduino+LCD
осталось со скриптом разобраться а то
1) показывает загрузку но помоему не корректно 2) не показывает память свободную 3) не показывает сколько подключенных клиентов |
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1) | |
|
|