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

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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.06.2014, 16:22   #1
Iura
Member
 
Регистрация: 10.03.2014
Адрес: Кишинев
Возраст: 41
Сообщений: 31
Вес репутации: 0
Iura is an unknown quantity at this point
Отправить сообщение для Iura с помощью Skype™
По умолчанию Мониторинг Ком порта HELP!!!

Есть Сервер(WR703N) с подключенным к нему Arduino(Mega2560) c NRF24l01.
Клиенты(atmega328p) c DS18B20 и реле (Связь NRF24l01) - отсылают по запросу
Код:
Client Send => 2 | 26.25 | 26.25 | 1 | 0 | 0 | 0 | = 14
2 = id
26.25 = temp
40.00 = влажность
1 | 0 | 0 | 0  = Реле
14 = длина строки
Клиент Ардуино:
PHP код:
#include <SPI.h>
#include "RF24.h"

byte cleint_id 3;

unsigned long time1=0;                       //Таймер на 1 сек

RF24 radio(910);

const 
uint64_t pipes[2] = {
  
0xF0F0F0F000LL0xF0F0F0F0FFLL};           // адреса каналов приема и передачи 

typedef struct{
  
byte id;
  
float t;
  
float h;
  
char data[5];
}
nf1;
nf1 client;

typedef struct{
  
byte id;
  
byte data[5];
}
nf0;
nf0 server

void setup(){
  
  
pinMode(3OUTPUT);
  
pinMode(4OUTPUT);
  
pinMode(5OUTPUT);
  
pinMode(6OUTPUT);
  
pinMode(7OUTPUT);
  
radio.begin();
  
Serial.begin(9600);  
  
radio.setDataRate(RF24_250KBPS);     // Скорость передачи
  
radio.setChannel(100);               // Номер канала от 0 до 127
  
radio.setRetries(15,15);             // Кол-во попыток и время между попытками
  
radio.openWritingPipe(pipes[1]);     // Открываем канал передачи
  
radio.openReadingPipe(1pipes[0]);  // Открываем один из 6-ти каналов приема
  
radio.startListening();              // Начинаем слушать эфир
}

void loop(){    
  if(
radio.available()){
     
radio.read(&serversizeof(server));
     
log();
     if(
server.id == cleint_id){
     
Rele_Write();
     
write_temp(); 
     }
  }
//---------------------------------для чтения сенсоров--------------------------
  
if ((millis()-time1) >= 1000) {         // обновляем сенсоры раз в секунду
  
client.id cleint_id;                          // Номер id
  
client.0;
  
client.0;
  
Rele_Read();
  
time1 millis();
  }
//------------------------------------------------------------------------------
}

void write_temp()
{
      
Rele_Read();
      
radio.stopListening();
      
delay(20);
      
radio.write(&clientsizeof(client));
      
radio.startListening();
      
delay(20); 
}

void Rele_Read(){
  if (
digitalRead(3) == HIGH) { client.data[1] = '1';}
    if (
digitalRead(4) == HIGH) {client.data[2] = '1';}
      if (
digitalRead(5) == HIGH) {client.data[3] = '1';}
        if (
digitalRead(6) == HIGH) {client.data[4] = '1';}
          if (
digitalRead(7) == HIGH) {client.data[5] = '1';}
  if (
digitalRead(3) == LOW) { client.data[1] = '0';}
   if (
digitalRead(4) == LOW) { client.data[2] = '0';}
    if (
digitalRead(5) == LOW) { client.data[3] = '0';}
     if (
digitalRead(6) == LOW) { client.data[4] = '0';}
      if (
digitalRead(7) == LOW) { client.data[5] = '0';} 
}

void Rele_Write(){
   if (
server.data[1] == 1) { digitalWrite(3HIGH);}
     if (
server.data[2] == 1) { digitalWrite(4HIGH);}
       if (
server.data[3] == 1) { digitalWrite(5HIGH);}  
         if (
server.data[4] == 1) { digitalWrite(6HIGH);}
           if (
server.data[5] == 1) { digitalWrite(7HIGH);}
    if (
server.data[1] == 0) { digitalWrite(3LOW);}
     if (
server.data[2] == 0) { digitalWrite(4LOW);}
       if (
server.data[3] == 0) { digitalWrite(5LOW);}  
         if (
server.data[4] == 0) { digitalWrite(6LOW);}
           if (
server.data[5] == 0) { digitalWrite(7LOW);}
}

void log(){
 
/*  логирование  */
       
Serial.print("Server Send => ");
       
Serial.print(server.id);
       
Serial.print(" | ");
       
Serial.print(server.data[1]); 
       
Serial.print(" | ");
       
Serial.print(server.data[2]); 
       
Serial.print(" | ");
       
Serial.print(server.data[3]); 
       
Serial.print(" | ");
       
Serial.print(server.data[4]); 
       
Serial.print(" | ");
       
Serial.print(server.data[5]); 
       
Serial.print(" = ");
       
Serial.println(sizeof(server));
      
/*==============================*/  

Сервер Ардуино:
PHP код:
#include <SPI.h>
#include "RF24.h"
#include <string.h>

RF24 radio(910);

const 
uint64_t pipes[2] = {
  
0xF0F0F0F000LL0xF0F0F0F0FFLL};

typedef struct{
  
byte id;
  
float t;
  
float h;
  
char data[5];
}
nf1;
nf1 client

typedef struct{
  
byte id;
  
byte data[5];
}
nf0;
nf0 server

String inputString "";
boolean stringComplete false;
char buffer[32]; 

void setup(){
  
Serial.begin(115200);
  
radio.begin(); 
  
radio.setDataRate(RF24_250KBPS);  
  
radio.setChannel(100); 
  
radio.setRetries(15,15); 
  
radio.openWritingPipe(pipes[0]); 
  
radio.openReadingPipe(1pipes[1]); 
  
radio.startListening();
}

void loop(){    
  
radio.startListening();
  
delay(20);
  if(
radio.available()){
    
radio.read(&clientsizeof(client));
    
Serial.print("Client Send => ");
    
Serial.print(client.id);
    
Serial.print(" | ");
    
Serial.print(client.t);
    
Serial.print(" | ");
    
Serial.print(client.h);
    
Serial.print(" | ");
    
Serial.print(client.data[1]);
    
Serial.print(" | ");
    
Serial.print(client.data[2]);
    
Serial.print(" | ");
    
Serial.print(client.data[3]);
    
Serial.print(" | ");
    
Serial.print(client.data[4]);
    
Serial.print(" | ");
    
Serial.print(client.data[5]);
    
Serial.print(" | ");
    
Serial.println(sizeof(client));
  }
    if (
stringComplete) {
       
inputString.toCharArray(buffer,32);
       
server.id atoi(strtok(buffer,":"));
       
server.data[1] = atoi(strtok(NULL,":"));
       
server.data[2] = atoi(strtok(NULL,":"));
       
server.data[3] = atoi(strtok(NULL,":"));
       
server.data[4] = atoi(strtok(NULL,":"));
       
server.data[5] = atoi(strtok(NULL,":"));
       
/*  логирование  */
       
Serial.print("Server Send => ");
       
Serial.print(server.id);
       
Serial.print(" | ");
       
Serial.print(server.data[1]); 
       
Serial.print(" | ");
       
Serial.print(server.data[2]); 
       
Serial.print(" | ");
       
Serial.print(server.data[3]); 
       
Serial.print(" | ");
       
Serial.print(server.data[4]); 
       
Serial.print(" | ");
       
Serial.print(server.data[5]); 
       
Serial.print(" = ");
       
Serial.println(sizeof(server));
      
/*==============================*/ 
    
radio.stopListening();
    
delay(20); 
    
radio.write(&serversizeof(server));
    
inputString "";
    
stringComplete false;
  }  
}

void serialEvent() {
  while (
Serial.available()) {
    
char inChar = (char)Serial.read(); 
    
inputString += inChar;
    if (
inChar == '.') {
      
stringComplete true;
    } 
  }

Служба /etc/init.d/com_port

PHP код:
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2011 OpenWrt.org

SERVICE_USE_PID=1245

START
=50

start
() {

i=0
while [ true ]
do
    while 
read LINE
    
do
    
IFS="|"
    
i=$(($i+1))
    
set -- $LINE
    id
=$1
    
if [ ${id:0:1} = "C" ]
then
    t
=$2
    h
=$3
    rele1
=$4
    rele2
=$5
    rele3
=$6
    rele4
=$7
    rele5
=$
    printf 
"{ 
    \"temperature\":\"%s\",
       \"humidity\":\"%s\",
          \"rele1\":\"%s\",
          \"rele2\":\"%s\",
          \"rele3\":\"%s\",
          \"rele4\":\"%s\"
            }" "
$t" "$h" "$rele1" "$rele2" "$rele3" "$rele4> /www/iphome/json
            
else
    
rele1=$2
    rele2
=$3
    rele3
=$4
    rele4
=$5
    rele5
=$6  
    printf 
"2:%s:%s:%s:%s:0:." "$rele1" "$rele2" "$rele3" "$rele4> /www/iphome/db/rele
    fi
    done 
< /dev/ttyACM0
/bin/sleep 3
done

}

stop() {
killall com_port

Создает 2 файла для дальнейшей работы.

При добавлении службу в автозагрузку
Код:
/etc/init.d/com_port enable
отказывается работать весь сервер.
Пришлось найти другой способ.
Добавил в /etc/rc.local
Код:
# Put your custom commands here that should be executed once
# the system init finished. By default this file does nothing.

stty -F /dev/ttyATH0 cs8 115200 -ixoff -evenp -xcase -echo

sleep 1

/etc/init.d/com_port start

exit 0
Это все работает пока отсылаются данные, но на следующее утро. При отправке не чего не происходит. Led на TX на Mega2560 мигает, но не чего не приходит. по ходу сама служба висит.
Помогите разобраться с этим.
Мониторинг данные каждую сек - обязательно., так как в дальнейшем будет добавлена сигнализация
Веб морда

Сервер

Клиент

Адрес
http://188.138.190.150:81

Последний раз редактировалось Iura; 14.06.2014 в 16:48. Причина: добавлено фото
Iura вне форума   Ответить с цитированием
Старый 14.06.2014, 16:32   #2
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Мониторинг Ком порта HELP!!!

Ардуино к роутеру подключен без роутера?
Admin вне форума   Ответить с цитированием
Старый 14.06.2014, 16:34   #3
Iura
Member
 
Регистрация: 10.03.2014
Адрес: Кишинев
Возраст: 41
Сообщений: 31
Вес репутации: 0
Iura is an unknown quantity at this point
Отправить сообщение для Iura с помощью Skype™
По умолчанию Re: Мониторинг Ком порта HELP!!!

Цитата:
Сообщение от Admin Посмотреть сообщение
Ардуино к роутеру подключен без роутера?
подключено через внутренние ком порт роутера
Iura вне форума   Ответить с цитированием
Старый 14.06.2014, 16:43   #4
Iura
Member
 
Регистрация: 10.03.2014
Адрес: Кишинев
Возраст: 41
Сообщений: 31
Вес репутации: 0
Iura is an unknown quantity at this point
Отправить сообщение для Iura с помощью Skype™
По умолчанию Re: Мониторинг Ком порта HELP!!!

Может кто в курсе как прикрутить serial.cgi
Iura вне форума   Ответить с цитированием
Старый 14.06.2014, 20:26   #5
Admin
Administrator
 
Аватар для Admin
 
Регистрация: 12.04.2010
Адрес: Москва
Сообщений: 9,616
Вес репутации: 9821
Admin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant futureAdmin has a brilliant future
По умолчанию Re: Мониторинг Ком порта HELP!!!

Попробуйте отключить трансляцию лога в UART
Admin вне форума   Ответить с цитированием
Старый 14.06.2014, 20:57   #6
Iura
Member
 
Регистрация: 10.03.2014
Адрес: Кишинев
Возраст: 41
Сообщений: 31
Вес репутации: 0
Iura is an unknown quantity at this point
Отправить сообщение для Iura с помощью Skype™
По умолчанию Re: Мониторинг Ком порта HELP!!!

отключил самого начало
Iura вне форума   Ответить с цитированием
Старый 14.06.2014, 21:19   #7
uni
Senior Member
 
Аватар для uni
 
Регистрация: 29.10.2013
Адрес: Екатеринбург, Нижневартовск, Энергодар
Возраст: 43
Сообщений: 573
Вес репутации: 599
uni has a spectacular aura aboutuni has a spectacular aura about
Отправить сообщение для uni с помощью ICQ
По умолчанию Re: Мониторинг Ком порта HELP!!!

Сделать ведение лога в каждой строчке и мониторить причину зависания.

Код:
LOGFILE=/www/modules/schoolbell/log.txt

# Ведение журнала.
loginfo () {

    lcnt=$(wc -l $LOGFILE | cut -f1 -d' ')
    
    # Ограничиваем размер файла журнала по количеству строк.
    if [ $lcnt -gt 100 ] ; then
    
        start=`expr $lcnt - 50`
        tail +$start $LOGFILE > /tmp/log.txt
        mv /tmp/log.txt $LOGFILE
        
    fi
    
    echo "`date +"%Y.%m.%d %H:%M:%S [INFO]"` $1" >> $LOGFILE
}
__________________
Россия навсегда!
uni вне форума   Ответить с цитированием
Старый 14.06.2014, 21:28   #8
Iura
Member
 
Регистрация: 10.03.2014
Адрес: Кишинев
Возраст: 41
Сообщений: 31
Вес репутации: 0
Iura is an unknown quantity at this point
Отправить сообщение для Iura с помощью Skype™
По умолчанию Re: Мониторинг Ком порта HELP!!!

о спс я как раз над этим думал
Iura вне форума   Ответить с цитированием
Старый 18.06.2014, 00:07   #9
Iura
Member
 
Регистрация: 10.03.2014
Адрес: Кишинев
Возраст: 41
Сообщений: 31
Вес репутации: 0
Iura is an unknown quantity at this point
Отправить сообщение для Iura с помощью Skype™
По умолчанию Re: Мониторинг Ком порта HELP!!!

Нашел другое решение. php_serial.class.php в цикле читает и пишет
Iura вне форума   Ответить с цитированием
Старый 16.07.2014, 10:13   #10
Casper
Junior Member
 
Регистрация: 20.12.2013
Сообщений: 27
Вес репутации: 0
Casper is an unknown quantity at this point
По умолчанию Re: Мониторинг Ком порта HELP!!!

Iura, можешь поделиться, рассказать как сделать мониторинг com порта, спасибо)) Хочу реализовать чтение данных от ардуино и записывать их в БД, так же мониторить БД на наличии изменений и отправлять ардуинке!
Casper вне форума   Ответить с цитированием
Ответ


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

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

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

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


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


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