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

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, 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

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

Хоть я и не такой чайник но как понял дело в каком-то порте.

Прошу помощи у форумчан решить мою проблемку=)
Сергей В вне форума   Ответить с цитированием
 


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

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

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

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


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


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