ethernet shield + RF 433Mhz

Hola Ehrja,

ok entiendo lo que quieres decirme ;) , probare a cargar datos falsos e ir separando partes del sketch, pero partiendo sin VirtualWire. Pues, podria ser que fuera conflicto con el virtualwire porque es lo ultimo que no he descartado aun del codigo jejeje

Muchas gracias por darme otra pista, luego lo probare y te cuento.

Saludos

//------- EDITO: Acabo de hacer la prueba de descartar el VirtualWire, y me ha funcionado a la perfeccion sin el!! Exceptuado errores como me dijiste de html, pero eso ya lo mirare mas adelante. He quitado el virtual, he cambiado los valores que me has dicho, y sin tocar nada, funciono. Ahgora si que veo en el serial:

server is at 192.168.1.177 //--- ya lo veia tambien con el virtualwire

new client //--- pero todo esto no con virtualwire GET / HTTP/1.1 Host: 192.168.1.177 User-Agent: Mozilla/5.0.......

client disonnected //--- hasta aqui

Humidity: 88 % Temperature: 24 *C Sonda:1

Bien! es un paso mas! ahora por lo menos algo mas tranquilo me quedo, esta todo el sketch medio bien, funciona :blush: Aunque lo que falla entonces es lo mas importante del sketch jejeje pero ahora ya sabemos de donde viene el error, del VirtualWire. No se si se dice asi pero, podria ser que el virtual ocupara el serial y no dejase al servidor coger los datos y por eso se queda todo el rato en cargando porque el serial esta ocupado?, y el lcd si puede?. :relaxed:

En cuando en cuando se "marea" el servidor y saca cosas raras, le doy a refrescar al navegador, algunas veces da error de conexion y algunas veces vuelve a la normalidad, o si reinicio el Arduino vuelve a funcionar bien, puede ser del codigo que esta un poco escrito a lo bruto verdad?

gracias Ehrja!! ;)

Primero que nada, te fijaste en la documentacion de virtualwire y de la libreria de ethernet? Lei que la virtualwire usa el timer2 y no puede funcionar con servos. Se que no tiene nada que ver, pero debe haber algo que se interponen y por eso no funcionan. Yo usaria los pines tx/rx con seria.Begin() y no con virtualwire, la que dejaria para cuando ya no tienes mas puertos por hardware disponibles. Incluso usando estos pines puede monitorearlos desde la terminal

Hola Maxid,

creo, que entiendo lo que me quieres decir.
He revisado de nuevo las docuentaciones de la Ethernet y del Virtualwire y creo que lo que me quieres decir es que tanto como el virtualwire como la ethernet, utiliza algun pin comun y por eso puede crear conflictos, cierto?

Virtualwire:
Caution: VirtualWire takes over Arduino Timer1, and this will affect the PWM capabilities of the digital pins 9 and 10.

Ethernet:
D0 - Unused
D1 - Unused
D2 - Connects the INT pin of the W5100
D3 - Unused
D4 - Used for SPI Chip Select
D5 - Unused
D6 - Unused
D7 - Unused

D8 - Unused
D9 - Unused
D10 - Used for SPI LED
D11 - Used for SPI MOSI
D12 - Used for SPI MISO
D13 - Used for SPI SCK

D14(A0) - Unused
D15(A1) - Unused
D16(A2) - Unused
D17(A3) - Unused
D18(A4) - Unused
D19(A5) - Unused

Seria el problema de todo esto por el pin 10?
He visto en los esquemas de la documentacion del virtualwire que conectan el modulo de transmision y el de receptor a los pines 11 y 12. Pero en la red cada uno los ponia diferentes.

Saludos!

por un lado puede ser: D2 - Connects the INT pin of the W5100 D4 - Used for SPI Chip Select D10 - Used for SPI LED D11 - Used for SPI MOSI D12 - Used for SPI MISO D13 - Used for SPI SCK todos estos pines son exclusivos de la ethernet, no puedes poner nada mas alli, ni hardware ni software.

En la documentacion por defecto usa los pines 12 y 11, por lo que NO PUEDES USAR LAS 2 COSAS A LA VEZ. Debes poner otros pienes en la configuración por ejemplo: vw_set_tx_pin(5); vw_set_rx_pin(6);

Dicho esto, comento y pregunto, ¿Para que usar virtualwire si tienes el UART del arduino? por lo que vi solo lu usas para debug. Pues no te hagas problema, usalo como debug y a la vez transmite cuando esté funcionando saca los println de debug y yá. o usa condicionales

if defined(DEVMODE)

Serial.begin(115200); Serial.print("Devmode ON");

else

// Setup the LCD myGLCD.InitLCD();

endif

https://www.inkling.com/read/arduino-cookbook-michael-margolis-2nd/chapter-17/recipe-17-6

Hola Maxid,

si, lo de los pins de la ethernet lo tengo claro, ahora me he fijado e incluso en la placa ethernet lo indica con los numeros pins subrayados. De momento no necesito ninguno de ellos, si necesitara mas pins tengo una MEGA en la recamara jejeje.

Los pins de los modulos tx y rx no hay problema tampoco, lo tengo, los Arduinos con el modulo transmisor en el pin 4 y en el otro Arduino que es el receptor tengo en el pin 7.

El usar el VirtualWire no es mas porque vi muchos ejemplos y al probarlo me funciono y parti de ahi y de otros ejemplos como lectura del DHT11 etc... Realmente como dije son parches de aqui y alla, como he podido he hecho funcionar hasta aqui :blush: Tambien vi algun ejemplo con RCswitch pero no llegue a probarlo porque parecia mas destinada esa libreria a otras cosas.

Utilizar el UART del Arduino? ahi si que me pierdo la verdad, no se como.

Mirare lo de las condicionales que me has pasado.

Saludos!

Sin Ofender creo estas mezclando mucho codigo sin leer primero, el copy/paste no sirve si no lo estudias

En este fragmento lo demuestra

void setup() {
  lcd.begin(16, 2);  //inicializas el lcd para que use el i2c
  Serial.begin(9600); // inicializas el UART por hardware de arduino
  Ethernet.begin(mac, ip); //inicializas la ethernet
  server.begin(); //comienza a leer los paquetes
  Serial.print("server is at "); // imprimes por puerto serial esta palabra
  Serial.println(Ethernet.localIP()); imprimes la ip local que le asignaste o se asignó por dhcp.

Sí estas usando el Serial por hardware de arduino. Por eso usar un serial por software cuando no te hace falta es ocupar memoria al vicio. Quita el virtualwire y conecta el modulo al pin tx y listo, lo que transmitirá será todo lo que pongas en los Serial.print(), y tambien puedes capturarlo en el monitor serial.

No no me ofendes Maxid, todo eso ya lo se yo pero poco a poco voy aprendiendo. Parto de "0" en programacion, solo para que te hagas una idea.

Tambien hago en el codigo comentarios con // pero de lo que yo ponga a lo que signifique en realidad...... Aqui puse el sketch sin nada por no liar mas la perdiz. Pero suelo ponerlo para ir enterandome en mis sketch.

Vale quito el virtualwire, como hago para que transmita la temperaruta capturada del DHT11? y por otra parte, como hago para que me muestre el receptor los datos que me envia el transmisor?

Saludos

para el dth11 usas esta libreria http://playground.arduino.cc/main/DHT11Lib

con Serial.available() sabes si hay datos para leer, despues los lees y los usas.

aca tienes toda la docmentacion: http://arduino.cc/en/Reference/HomePage

Ok Maxid, me he quedado igual :blush: disculpa! La documentacion esta muy bien si sabes lo que lees pero sino es como leer en extraterrestre, por eso poco a poco ire empapando informacion.

seguire probando sin virtualwire a ver si lo consigo a lo que te refieres. Gracias por la pista!

Saludos!

mas tarde te respondo con tiempo sobre lo que posteaste en el comienzo

Oh que bien ya encontramos el problema…

Virtualwire:
Caution: VirtualWire takes over Arduino Timer1, and this will affect the PWM capabilities of the digital pins 9 and 10.

Lo que dice maxid tiene sentido: utilizar el serial para mandar y recibir los datos por el inalambrico
te iba a sugerir eso en mi primer comentario, mirando lo que maxid decia, pero me estaba haciendo bolas comparando lo con virtualwire y no quería confundirte mas jejeje…
De hecho en mi proyecto para la parte que manda y recibe los datos utilizo el USART pero como estoy usando un attiny2313 el codigo es chiquititito, pero bueno nada que ver con el Serial de arduino.


es fácil utilizar el serial con los modulos inalambricos:

Arduino - Receptor ----- Arduino - Transmisor
pin 0 - data pin (rx) ~~~~~~~~~~~ pin 1 - data pin (TX)

Solo pones el pin de datos del receptor en el pin rx del arduino y lo mismo con el otro pero en el tx, y en el código utiliza Serial.print("algo "); para mandar y el otro lo recibe con Serial.read();
cierto maxid?

Hola Ehrja,
entiendo mas o menos lo que quereis decirme, empezare de nuevo, intentando enviar aunque sea un “hola” y a partir de ahi seguir.

Saludos!

EDITO:

Me he puesto manos a la obra, pero…primera y de frente!. He puesto como me habeis dicho el transmisor en el pin 1 TX, he subido el sketch con el cable del modulo transmisor desconectado, para que no de errores al compartir los pins con el USB, alimentandolo externamente. Una cosa que no me gusta como dije en un anterior post cuando lo probe por primera vez, es que se queda todo el rato de continuo el modulo transmitiendo. Cambio el delay, y retrasa el envio de informacion, se escucha, pero se queda todo el rato el modulo en portadora. una consecuencia de tenerlo asi seria que las baterias durarian mucho menos.
Bueno lo aceptamos y seguimos… :wink:

Este es el skecth que he subido al Arduino del transmisor:

int i = 3;
void setup(){
  Serial.begin(9600);
}
void loop() {
  Serial.println(i);

  delay(2000);
}

Es asi como decis? Asi me muestra en el serial el numero 3 todo el rato. Cada 2 segundos, entre la portadora que hace el modulo transmisor escucho como se envia la informacion, coincidiendo cada vez que me sale el numero 3 en el serial.
Entonces entiendo que esta enviando la informacion.

Paso al arduino con el modulo receptor.
Misma operacion, envio el sketch con el cable del modulo receptor desconectado para que no de error , luego lo conecto. En este Arduino lo pongo al pin 0 RX y lo alimento externamente tambien.

Este es el codigo del Arduino Receptor:

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup() {
   lcd.begin(16, 2);  
  Serial.begin(9600);
  Serial.println("hola");
  pinMode(0, INPUT);
}

void loop()
 {
   int receptor = digitalRead(0);
   Serial.println(" mensaje: ");
   Serial.println(receptor);
   lcd.setCursor(0, 0);
   lcd.print("M="); 
   lcd.print(receptor);
   delay(1000);
 }

Que he hecho mal? no llego a recibir nada :blush:

He probado con o sin pinMode, como salida y entrada, pero nada. Al quedarme sin ver el serial, no puedo ver que sucede, tengo que mostrarlo en el lcd, pero siempre sale el valor de 1 o 0, vamos que va mal.

Sigo mirando informacion.

Saludos!

Hola. Para enviar bytes deberías usar Serial.write en el emisor y Serial.read en el receptor. Echale un vistazo a la referencia de Serial para ver todos los comandos disponibles. Con un digitalread por sí solo no podrás leer un dado serializado.

Ok Noter gracias por tu respuesta, voy a mirarlo. ;)

Saludos!

Seria Serial.read() sin utilizar el pinMode() el Serial.begin() se encarga de configurar los dos pines Rx y Tx

eso de que se queda transmitiendo todo el rato, no me quedo muy claro.

Hola Ehrja,

te comento, tengo un walky que me sube a 433 Mhz, con lo cual puedo escuchar las señales. Con el VirtualWire cuando transmitia solo transmitia la informacion y paraba. Asi asi todas las veces que transmite solo hace la portadora necesaria para enviar la info.

Con el pin TX no sucede asi, hace portadora continua, y cada tiempo indicado en el delay envia la informacion, pero sigue haciendo portadora.

En la jerga HAMRADIO te diria que hace PTT continuo y cada tiempo envia la informacion. Imaginatelo asi, tienes un walky y cada vez que hablas (en este caso envias la info) pulsas un boton (se llama PTT) no? Asi seria la forma correcta, hablas y sueltas el boton. Bien con el virtualwire me lo hace asi, que pasa cuando no utilizo el virtualwire y lo pongo directo al TX para hacerlo por serial, pues imaginate, quieres hablar por el walky, y SIEMPRE tienes el boton pulsado, pero hablas cada tiempo. Con lo cual siempre estas emitiendo portadora, pero cada tiempo emites la info como modulacion por decirlo de algun modo. Si quiero ponerlo remoto, el consumo de bateria aumentara considerablemente, etc etc....

No se si me he explicado bien jejeje :P

Saludos!

si creo que si te entiendo, la señal es mas limpia con el virtualWire que con el serial, nunca probe usar el virtualWire:

| señal | virtualWire ---------------11010101------------------- Serial &%&%$$&#*11010101*&&$&%##%%$/

de hecho en los datos que recupere para mi proyecto menciona que hay que usar interupciones y un truco mandando un dato al inicio de la cadena, como un dato especifico que indica el comienzo de la transmicion, en medio los datos y al final un dato que le llaman checksum este es la suma de los datos y sirve para comprobar la integridad de la cadena, siempre escucha pero cuando escucha ese dato se interrumpe el codigo y se ejecuta el codigo dentro de la interrupcion, que seria para leer y analizar la cadena de datos, todo un reto, no solo por los interruptores(cosa fasil) pero por el continuo ruido que hay en la señal que es supongo es originada por el serial en reposo.

-conrazon ya me estaba interesando el virtualWire jeje, en la documentación mencionan un lado negativo del serial....

| señal ejemplo con el serial | **/$&(/&#%$/(/(11111111 10101110 1100101 checksum (/)&%&%#$#((&$&($&

ahora recuerdo que en mi proyecto me quede pensando en una forma de evitar ese ruido y ahora mismo se me ocurrió una muy sencilla pero no se si funcione, utilizar un transistor o un mosfet para habilitar la coneccion entre el pin Tx y el transmisor, con otro pin lo habilitamos antes de mandar la señal y lo deshabilitamos al final, bueno es solo una idea. -que no creo que sea tan buena despues de todo, ahora que lo pienso tambien recibia ruido cuando el transmisor estaba apagado, bueno en fin lo dejo aquí "for the record".

Entonces si que puede que sea eso Ehrja, faltaria mirar eso, la forma de que no fuera de continuo.
Pero bueno esto cada vez se va liando mas, al final optare por desistir de la ethernet, comprar un lcd mas grande, y dejarlo todo para mas adelante o cuando comprenda mejor las cosas.

Sigo probando!

Saludos

No bueno yo tampoco quería des motivarte, yo en cambio le echaría un ojo clínico al virtualWire o esperar que maxid nos sugiera algo con el serial

saludos.

No no todo lo contrario Ehrja! aun que me dais pistas y voy buscando y probando cosas, sino creo que hace dias que no hubiera continuado jejeje De todas formas quiero agradeceroslo!

Saludos