Pero pongo la misma direccion de 5 bytes en ambos. Eso lo repase varias veces.
Bueno, he estado mirando el proyecto de SL Air Mote en https://github.com/SpainLabs/AIR/blob/ma..._MCP9700.c y veo que usa la librería de Bizintek con un pic 16F87A, supongo que era lo que estabas usando. Yo no tengo ese modelo a mano, asi que he utilizado un 16F877A, pero bueno al final es igual. Lo malo de la librería de bizintek es que por un lado sólo te deja configurar un byte de la dirección de los 5 posibles, y por otro que sólo permite enviar 8 bytes cada vez, además de que envía otros dos al principio con el byte de la dirección configurada + un número secuencial, vamos que está pensada para usarse con los robots moway pero no es de propósito general.
Pero bueno, dicho esto, ya he logrado comunicar el pic con la raspberry pi a través de nrf24l01 y aquí pongo la prueba que he hecho:
El código fuente en C para el PIC es este (está basado en https://sites.google.com/site/proyectosr...6-nrf24l01 ):
main.h
Código: #include <16F877A.h>
#device adc=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NODEBUG //No Debug mode for ICD
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD //No EE protection
#FUSES NOWRT //Program memory not write protected
#use delay(clock=20000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, bits=8, parity=N)
main.c
Código: #include "main.h"
#include "lib_rf2gh4_10.h"
#include <string.h>
#int_ext // Esta rutina está para un futuro si haces comunicaciones bidireccionales.
void int_RB0() // No tiene efecto en el programa principal, ya que sólo emite.
{ // Se encargaría de la recepción de datos.
int8 ret1;
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) )
{
do
{
ret1 = RF_RECEIVE();
} while ( (ret1 == 0) || (ret1 == 1) );
}
}
void main()
{
int8 nodo = 1;
int16 trama = 1;
float bateria = 4.0;
float temperatura = 25.0;
float humedad = 50.0;
char texto[50];
int8 codigo;
int8 contador;
int8 indice;
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
RF_INT_EN();
RF_CONFIG_SPI();
RF_CONFIG(0x40,0x02);
RF_ON();
printf("Esperando 10 segundos\r\n");
delay_ms(10000);
for(;;)
{
sprintf(texto, "<%u#%lu#BA:%.2f#TE:%.2f#HU:%.2f>", nodo, trama, bateria, temperatura, humedad); // <> son para delimitar un trama al estar partida en bloques de 8 bytes
printf("%s\r\n", texto);
for(contador = 0, indice = 0; contador < strlen(texto); contador++)
{
RF_DATA[indice] = texto[contador];
if(indice == 7)
{
RF_DIR=0x01;
codigo=RF_SEND();
delay_ms(100);
indice = 0;
}
else indice++;
}
if(indice > 0)
{
while(indice < 8)
{
RF_DATA[indice] = '*';
indice++;
}
RF_DIR=0x01;
codigo=RF_SEND();
}
trama++;
delay_ms(1000);
}
}
El código fuente en python para la raspberry pi es este:
Código: #!/usr/bin/python
from nrf24 import NRF24
import time
pipe = [0xc2, 0xc2, 0xc2, 0xc2, 0x01]
radio = NRF24()
radio.begin(0, 0, 25, 18)
radio.setRetries(15,15)
radio.setPayloadSize(10)
radio.setChannel(0x40)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MAX)
radio.openReadingPipe(1, pipe)
radio.startListening()
radio.printDetails()
radio.powerUp()
salida = ""
con_info = False
while True:
while not radio.available(0):
time.sleep(0.250)
ignora = 0
buffer = []
radio.read(buffer)
for caracter in buffer:
if caracter > 31 and ignora > 1:
letra = chr(caracter)
if con_info == True:
if letra == '>':
print salida
con_info = False
elif letra == '<':
salida = ""
else:
salida = salida + letra
elif letra == '<':
con_info = True
salida = ""
ignora = ignora + 1
Esa es la libreria que tengo yo, exacto. Aunque solo puedas configurar 1 byte, siempre puedes modificar la libreria. Yo lo que hago es montar un buffer para almacenar lo que quiero mandar y luego partirlo en paquetes de 8 bytes. Todo de forma básica, y si se pierde algún paquete, esa trama se queda coja. Tengo en mente preparar los paquetes de diferente forma para llevar un control de lo que llega y en caso de algun fallo, pedir el paquete perdido.
Cambiaste algun parametro de la libreria de la rasp o de la del pic?
Al final lo estas haciendo todo tu
grafisoft escribió:Esa es la libreria que tengo yo, exacto. Aunque solo puedas configurar 1 byte, siempre puedes modificar la libreria. Yo lo que hago es montar un buffer para almacenar lo que quiero mandar y luego partirlo en paquetes de 8 bytes. Todo de forma básica, y si se pierde algún paquete, esa trama se queda coja. Tengo en mente preparar los paquetes de diferente forma para llevar un control de lo que llega y en caso de algun fallo, pedir el paquete perdido.
Cambiaste algun parametro de la libreria de la rasp o de la del pic?
Al final lo estas haciendo todo tu
Dejé intacta la librería del pic y he modificado el script de Python para que se comunique con las peculiaridades de esta.
Jeje, tienes razón, pero como veía tenias problemas con la comunicación me he puesto con ello para ver si podía ayudar, pero siempre son ejemplos, no leo datos de ningún sensor, todavía no inserta nada en base de datos, etc.
No paro por casa el tiempo suficiente como para ponerme a mirar estas cosas. Muy agradecido por todo el esfuerzo
A ver si me llegan los componentes pendientes, monto el hardware definitivo y hago las pruebas
Pues nada, esto va pa'lante
Comparto aquí un enlace al proyecto web de http://sensores.homelinux.net que incluye el html, php, css, javascript, imágenes y fuentes truetype.
https://www.dropbox.com/s/bkuljni9nxjx6k...s.zip?dl=0
Para probarlo hay que guardarlo en la carpeta /var/www (o una subcarpeta dentro de esta). Si los valores de usuario, contraseña, bbdd, etc son distintos hay que cambiarlos en el fichero php/configuracion.inc.php
A ver si se anima más gente a participar.
Muy buen trabajo sistemasorp, enhorabuena!
WeSo escribió:Muy buen trabajo sistemasorp, enhorabuena!
Gracias, lo bueno de los aportes que hacemos en esta comunidad de spainlabs es que sirven de base para que otra gente pueda usarlo en sus proyectos. Todos salimos beneficiados antes o después
Que vergüenza me esta dando no acabar mi parte :dale2: :dale2: :dale2: :dale2: :dale2:
Sin ninguna duda de que te mandare un kit del hardware que estoy preparando. Cualquier muestra de agradecimiento sera pequeña por vuestros aportes :one: :one: :one:
grafisoft escribió:Que vergüenza mee sta dando no acabar mi parte :dale2: :dale2: :dale2: :dale2: :dale2:
Cada uno tiene el tiempo que tiene, lo mejor es no agobiarse, ya que estas cosas al fin y al cabo es una afición y no hay fecha de finalización :yeah:
grafisoft escribió:Sin ninguna duda de que te mandare un kit del hardware que estoy preparando. Cualquier muestra de agradecimiento sera pequeña por vuestros aportes :one: :one: :one:
Pues tengo ganas de hincarle el diente, pero yo corro con los gastos de placa + envío.
No no, con los gastos corro yo, has hecho muchísimas cosas y me has ahorrado quebraderos de cabeza. Como mínimo, déjame agradecértelo de esta forma
Por cierto, se me olvidaba otra cosa con respecto a la web para adaptarla a tu situación:
Para añadir más nodos al listbox: en el fichero index.html en la etiqueta select poner tantos option como sean necesarios
Para cambiar el plano de la casa:
-sustituir el fichero img/plano.jpg (llamarlo igual si no se quiere cambiar el código javascript).
-en la etiqueta canvas id="vivienda" del index.html poner los valores width y height de la nueva imagen.
-en el selector #plano del fichero css/estilos.css poner el valor width de la nueva imagen.
Para situar los círculos con los datos en el plano: en la variable nodos del fichero js/script.js poner las posiciones X e Y de todos los nodos.
Menudo currazo te estás pegando sistemasorp. Voy a intentar replicar tu trabajo y avanzar a partir de ahí, que todo lo que sea colaborar...
Para empezar, sólo tengo la raspberry, con un nrtf24L01 por habitacion que quiera controlar es suficiente? o necesito algo más?
Quiero ayudar pero estoy pez pez pez XD
Además del nrf24l01 necesitas un micro (pic o avr) y un sensor de temperatura y humedad por cada una de las estancias que quieras monitorizar.
Obtengo este error al ejecutar el código de python
Código: File "air_v1.py", line 3
from nrf24 import NRF24
^
IndentationError: unexpected indent
Según he leído, se debe al formatear el código usando tabulador, pero quito todos los espacios y sigo obteniendo el mismo error, pero en otra linea. Alguna sugerencia?
Ummm, eso debería estar al principio de la línea, sin indentar.
He copiao el codigo que pusiste tal cual, pero nada, me tira el error
Vale, puede ser que no esté instalada la libería nrf24 de python. Yo seguí los pasos que aquí se mencionan http://www.akirasan.net/raspbpi-arduino-...-nrf24l01/
Lo seguí al pie de la letra el tutorial. Estoy por formatear la SD, y hacer instalacion de 0
|