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

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


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

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

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

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


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


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