This forum uses cookies
This forum makes use of cookies to store your login information if you are registered, and your last visit if you are not. Cookies are small text documents stored on your computer; the cookies set by this forum can only be used on this website and pose no security risk. Cookies on this forum also track the specific topics you have read and when you last read them. Please confirm whether you accept or reject these cookies being set.

A cookie will be stored in your browser regardless of choice to prevent you being asked this question again. You will be able to change your cookie settings at any time using the link in the footer.

  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
RaspBerry Pi + nrf24L01
#61
Pero pongo la misma direccion de 5 bytes en ambos. Eso lo repase varias veces.
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#62
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
  Responder
#63
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 Triste
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#64
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 Triste

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.
  Responder
#65
No paro por casa el tiempo suficiente como para ponerme a mirar estas cosas. Muy agradecido por todo el esfuerzo Sonrisa

A ver si me llegan los componentes pendientes, monto el hardware definitivo y hago las pruebas Sonrisa
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#66
Pues nada, esto va pa'lante Mola
  Responder
#67
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.
  Responder
#68
Muy buen trabajo sistemasorp, enhorabuena!
  Responder
#69
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 Gran sonrisa
  Responder
#70
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:
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#71
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. Sisi3
  Responder
#72
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 Guiño
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#73
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.
  Responder
#74
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... Sonrisa

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
  Responder
#75
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.
  Responder
#76
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?
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#77
Ummm, eso debería estar al principio de la línea, sin indentar.
  Responder
#78
He copiao el codigo que pusiste tal cual, pero nada, me tira el error
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder
#79
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/
  Responder
#80
Lo seguí al pie de la letra el tutorial. Estoy por formatear la SD, y hacer instalacion de 0
-> Mi CNC de escritorio CNCDesktop 500 -> https://www.spainlabs.com/foros/tema-Fresadora-Desktop-CNC-500
-> Laboratorio de Fabricación Digital Maker: https://www.lowpower.io 
--> Twitter: https://twitter.com/Grafisoft_ES  | IG: https://www.instagram.com/lowpowerio/
  Responder


Posibles temas similares…
Tema Autor Respuestas Vistas Último mensaje
  CONSULTA Cómo puedo conectar varias cámaras IP a la vez por wifi a una raspberry? erjavi_zgz 0 2,097 03-02-2022, 12:22 AM
Último mensaje: erjavi_zgz
  Octoprint en Raspberry y MKS SGEN problema puertos Mafer 2 1,077 26-10-2021, 02:27 PM
Último mensaje: Mafer
  CONSULTA Opiniones Raspberry Pi Pico RP2040 grafisoft 0 933 21-02-2021, 07:32 PM
Último mensaje: grafisoft
  Problema inicio Raspberry pantalla negra en lugar de desktop Electromecánico 3 10,507 16-09-2020, 09:31 AM
Último mensaje: wolfmech
  Conexión Raspberry a Ender 3 Lione666 3 2,449 04-08-2020, 05:17 PM
Último mensaje: ramiro24