Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 29.07.2016, 10:04   #1
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
Angry 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
sakatgg
Senior Member
 
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989
sakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nice
По умолчанию Re: Openwrt+Arduino+LCD

Цитата:
выдает сообщение об:
./lcdduino.sh: line 103: can't create /dev/tts/0: nonexistent directory
На wdr3500 uart (консоль) вроде /dev/ttyS0 (на wdr4300 по крайней мере, а они как братья), соответственно в строке port="/dev/tts/0" замени.
Глянь в папке /dev

Последний раз редактировалось sakatgg; 29.07.2016 в 12:53.
sakatgg вне форума   Ответить с цитированием
Старый 29.07.2016, 13:10   #3
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию 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
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию Re: Openwrt+Arduino+LCD

изменил на экране 0 а в консоле при старте скрипта
Цитата:
HOME='/root'
IFS='
'
LOGNAME='root'
MC_TMPDIR='/tmp/mc-root'
OPTIND='1'
PATH='/usr/bin:/usr/sbin:/bin:/sbin'
PPID='3358'
PS1='\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD='/mnt/sh'
SHELL='/bin/ash'
SHLVL='3'
SSH_CONNECTION='192.168.1.22 62808 192.168.1.1 22'
SSH_TTY='/dev/pts/0'
TERM='xterm-256color'
TERMINFO='/usr/share/terminfo'
USER='root'
port='/dev/ttyS0'
expr: syntax error
expr: non-numeric argument
expr: syntax error
./lcdduino.sh: line 104: wl: not found
HOME='/root'
IFS='
'
LOGNAME='root'
MC_TMPDIR='/tmp/mc-root'
OPTIND='1'
PATH='/usr/bin:/usr/sbin:/bin:/sbin'
PPID='3358'
PS1='\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD='/mnt/sh'
SHELL='/bin/ash'
SHLVL='3'
SSH_CONNECTION='192.168.1.22 62808 192.168.1.1 22'
SSH_TTY='/dev/pts/0'
TERM='xterm-256color'
TERMINFO='/usr/share/terminfo'
USER='root'
i='6'
n='13'
p=''
port='/dev/ttyS0'
s='0'
s2='u'
expr: non-numeric argument
expr: syntax error
HOME='/root'
IFS='
'
LOGNAME='root'
MC_TMPDIR='/tmp/mc-root'
OPTIND='1'
PATH='/usr/bin:/usr/sbin:/bin:/sbin'
PPID='3358'
PS1='\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD='/mnt/sh'
SHELL='/bin/ash'
SHLVL='3'
SSH_CONNECTION='192.168.1.22 62808 192.168.1.1 22'
SSH_TTY='/dev/pts/0'
TERM='xterm-256color'
TERMINFO='/usr/share/terminfo'
USER='root'
i='6'
n=''
p=''
port='/dev/ttyS0'
s='0'
s2='u'
expr: syntax error
expr: non-numeric argument
expr: syntax error
./lcdduino.sh: line 104: wl: not found
HOME='/root'
IFS='
'
LOGNAME='root'
MC_TMPDIR='/tmp/mc-root'
OPTIND='1'
PATH='/usr/bin:/usr/sbin:/bin:/sbin'
PPID='3358'
PS1='\u@\h:\w\$ '
PS2='> '
PS4='+ '
PWD='/mnt/sh'
SHELL='/bin/ash'
SHLVL='3'
SSH_CONNECTION='192.168.1.22 62808 192.168.1.1 22'
SSH_TTY='/dev/pts/0'
TERM='xterm-256color'
TERMINFO='/usr/share/terminfo'
USER='root'
i='6'
n='13'
p=''
port='/dev/ttyS0'
s='0'
Сергей В вне форума   Ответить с цитированием
Старый 29.07.2016, 13:58   #5
sakatgg
Senior Member
 
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989
sakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nice
По умолчанию Re: Openwrt+Arduino+LCD

Цитата:
expr: syntax error
expr: non-numeric argument
Я не программист, но это на ошибку синтаксиса указывает
Попробуй вывод команды echo "Hello, world!" > /dev/ttyS0 на экран
sakatgg вне форума   Ответить с цитированием
Старый 29.07.2016, 14:42   #6
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию Re: Openwrt+Arduino+LCD

команда выполняется но на экране пусто
Сергей В вне форума   Ответить с цитированием
Старый 29.07.2016, 14:44   #7
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию Re: Openwrt+Arduino+LCD

хотя если через консол компорта в ардуине сдк подать таки команды
^c: — очистить дисплей
^0:text — вывести text на первой строке
^1:text — вывести text на второй строке
^s: — вывести небольшую заставочку

на экране отображается результат
Сергей В вне форума   Ответить с цитированием
Старый 29.07.2016, 14:54   #8
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию Re: Openwrt+Arduino+LCD

опа па кажись нашел ошибку у чувака была ардуинка самодельная и там контакты rx tx местами переставлены))

остаеться вопрос кто навести порядок в скрипте чтоб ошибки не возникали,?
Сергей В вне форума   Ответить с цитированием
Старый 29.07.2016, 15:22   #9
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию Re: Openwrt+Arduino+LCD


подключение рабочее
Сергей В вне форума   Ответить с цитированием
Старый 29.07.2016, 15:23   #10
Сергей В
Member
 
Регистрация: 27.08.2015
Сообщений: 54
Вес репутации: 0
Сергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to allСергей В is a name known to all
По умолчанию Re: Openwrt+Arduino+LCD

осталось со скриптом разобраться а то
1) показывает загрузку но помоему не корректно
2) не показывает память свободную
3) не показывает сколько подключенных клиентов
Сергей В вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 09:29. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика