Go Down

Topic: WizNET (W5100) Ethernet shield + Nrf24l01 + Arduino Mega (Read 98 times) previous topic - next topic

zurgbr

Olá, estou tentando criar um ethernet Getway, do My Sensor, para fazer uma automação em minha casa.
Já tentei fazer de varios modos e nada.
Se alguém já fez e poder ensinar, por favor.

ligação atual, mas não funciona.
pin 5 =ce
pin 6 = csn
PIN 50 = MISO
PIN 51 = MOSI
PIN 52 = SCK

ja tentei fazer a alteração na biblioteca tbm, e nada.

luisilva


zurgbr

Code: [Select]

/*
 * Copyright (C) 2013 Henrik Ekblad <henrik.ekblad@gmail.com>
 *
 * Contribution by a-lurker
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * version 2 as published by the Free Software Foundation.
 *
 * DESCRIPTION
 * The EthernetGateway sends data received from sensors to the ethernet link.
 * The gateway also accepts input on ethernet interface, which is then sent out to the radio network.
 *
 * The GW code is designed for Arduino 328p / 16MHz.  ATmega168 does not have enough memory to run this program.
 *
 *
 * COMPILING WIZNET (W5100) ETHERNET MODULE
 * > Edit RF24_config.h in (libraries\MySensors\utility) to enable softspi (remove // before "#define SOFTSPI").
 *
 * COMPILING ENC28J60 ETHERNET MODULE
 * > Use Arduino IDE 1.5.7 (or later)
 * > Disable DEBUG in Sensor.h before compiling this sketch. Othervise the sketch will probably not fit in program space when downloading.
 * > Remove Ethernet.h include below and include UIPEthernet.h
 * > Remove DigitalIO include
 * Note that I had to disable UDP and DHCP support in uipethernet-conf.h to reduce space. (which means you have to choose a static IP for that module)
 *
 * VERA CONFIGURATION:
 * Enter "ip-number:port" in the ip-field of the Arduino GW device. This will temporarily override any serial configuration for the Vera plugin.
 * E.g. If you want to use the defualt values in this sketch enter: 192.168.178.66:5003
 *
 * LED purposes:
 * - RX (green) - blink fast on radio message recieved. In inclusion mode will blink fast only on presentation recieved
 * - TX (yellow) - blink fast on radio message transmitted. In inclusion mode will blink slowly
 * - ERR (red) - fast blink on error during transmission error or recieve crc error 
 *
 * See http://www.mysensors.org/build/ethernet_gateway for wiring instructions.
 *
 */

#include <DigitalIO.h>     // This include can be removed when using UIPEthernet module 
#include <SPI.h> 
#include <MySensor.h>
#include <MyGateway.h> 
#include <stdarg.h>

// Use this if you have attached a Ethernet ENC28J60 shields 
//#include <UIPEthernet.h> 

// Use this fo WizNET W5100 module and Arduino Ethernet Shield
#include <Ethernet.h>   


#define INCLUSION_MODE_TIME 1 // Number of minutes inclusion mode is enabled
#define INCLUSION_MODE_PIN  3 // Digital pin used for inclusion mode button

#define RADIO_CE_PIN        5  // radio chip enable
#define RADIO_SPI_SS_PIN    6  // radio SPI serial select
#define RADIO_ERROR_LED_PIN 7  // Error led pin
#define RADIO_RX_LED_PIN    8  // Receive led pin
#define RADIO_TX_LED_PIN    9  // the PCB, on board LED

#define IP_PORT 5003        // The port you want to open
IPAddress myIp (192, 168, 178, 66);  // Configure your static ip-address here    COMPILE ERROR HERE? Use Arduino IDE 1.5.7 or later!

// The MAC address can be anything you want but should be unique on your network.
// Newer boards have a MAC address printed on the underside of the PCB, which you can (optionally) use.
// Note that most of the Ardunio examples use  "DEAD BEEF FEED" for the MAC address.
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  // DEAD BEEF FEED

// a R/W server on the port
EthernetServer server = EthernetServer(IP_PORT);

// No blink or button functionality. Use the vanilla constructor.
MyGateway gw(RADIO_CE_PIN, RADIO_SPI_SS_PIN, INCLUSION_MODE_TIME);

// Uncomment this constructor if you have leds and include button attached to your gateway
//MyGateway gw(RADIO_CE_PIN, RADIO_SPI_SS_PIN, INCLUSION_MODE_TIME, INCLUSION_MODE_PIN, RADIO_RX_LED_PIN, RADIO_TX_LED_PIN, RADIO_ERROR_LED_PIN);


char inputString[MAX_RECEIVE_LENGTH] = "";    // A string to hold incoming commands from serial/ethernet interface
int inputPos = 0;

void setup() 
{
  Ethernet.begin(mac, myIp);

  // give the Ethernet interface a second to initialize
  delay(1000);

  // Initialize gateway at maximum PA level, channel 70 and callback for write operations
  gw.begin(RF24_PA_LEVEL_GW, RF24_CHANNEL, RF24_DATARATE, writeEthernet);

  // start listening for clients
  server.begin();
}

// This will be called when data should be written to ethernet
void writeEthernet(char *writeBuffer) {
  server.write(writeBuffer);
}


void loop()
{
  // if an incoming client connects, there will be
  // bytes available to read via the client object
  EthernetClient client = server.available();

  if (client) {
      // if got 1 or more bytes
      if (client.available()) {
         // read the bytes incoming from the client
         char inChar = client.read();

         if (inputPos<MAX_RECEIVE_LENGTH-1) {
           // if newline then command is complete
           if (inChar == '\n') { 
              // a command was issued by the client
              // we will now try to send it to the actuator
              inputString[inputPos] = 0;

              // echo the string to the serial port
              Serial.print(inputString);

              gw.parseAndSend(inputString);

              // clear the string:
              inputPos = 0;
           } else { 
             // add it to the inputString:
             inputString[inputPos] = inChar;
             inputPos++;
           }
        } else {
           // Incoming message too long. Throw away
           inputPos = 0;
        }
      }
   } 
   gw.processRadioMessage();   
}


luisilva

Qual é a parte que não está a funcionar, o módulo ethernet ou o rádio?
Pelo que percebi do programa, os 2 dispositivos vão comunicar via SPI e assim, é necessário alterar o SPI de comunicação do rádio para software. Em princípio, assim, os pinos que terão que ser utilizados não podem ser os que descreve no 1º post (esses são os pinos para o SPI por hardware).

bubulindo

Eu tenho essa configuração a funcionar sem problemas... uso os pinos A2 e A3 como Chip Enable e Chip Select.

Já conseguiste colocar o nRF24 a funcionar sem o shield Ethernet? 
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

HugoPT

Quote
Pelo que percebi do programa, os 2 dispositivos vão comunicar via SPI e assim, é necessário alterar o SPI de comunicação do rádio para software.
Boas camaradas.
Luis não entendo esta sua afirmação, como assim alterar a comunicação do radio para software?
Eu conheço minimamente o Nrf24l01 e não me lembro de haver uma comunicação via SPI por "software"
Estarás a sugerir BitBang?
Quote
Em princípio, assim, os pinos que terão que ser utilizados não podem ser os que descreve no 1º post (esses são os pinos para o SPI por hardware).
Penso que é esperado que ambos os dispositivos fiquem "pendurados" no SPI ao mesmo tempo, manipulando apenas o chip select Pin de modo a escolher para qual dos dispositivos quer falar , mantendo o outro desativado.Eventualmente é necessário mudar "on the fly" o modo do SPI caso ele seja diferente de dispositivo para dispositivo no momento que se quer falar com ele.
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

luisilva

Bem-vindos de volta! :)
Sim, Hugo, essa seria a situação ideal, no entanto, pelo que eu percebi do que li nos comentários do programa:
Quote
Code: [Select]

 * COMPILING WIZNET (W5100) ETHERNET MODULE
 * > Edit RF24_config.h in (libraries\MySensors\utility) to enable softspi (remove // before "#define SOFTSPI").
 *
por algum motivo deve haver uma incompatibilidade e o programa não compila. Ou estou a perceber mal?

bubulindo

Talvez a solução seja uma biblioteca diferente?
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

HugoPT

Quote
Talvez a solução seja uma biblioteca diferente?
Também penso isso e inicialmente seria este o meu objetivo se tivesse com isso em mãos , não ter de reinventar a roda tentando fazer bit bang para não ligar ambos no mesmo SPI.Em suma isso tem de funcionar no mesmo SPI, e é a situação desejável que aconteça.Agora o porque de o autor ter feito assim não estou a ver
Debian,Mint,Ubuntu
Arduino Mega 2560
Arduino Nano
Arduino Duemilanove
MAC OS Montain Lion
Raspberry PI Model B

bubulindo

E há quem já tenha colocado isso a funcionar...

Já agora, se usarem o Arduino MEGA tem de haver um certo cuidado com a fonte de alimentação (adicionar um condensador) para que o nRF24 funcione como deve ser.
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

zurgbr

Eu tenho essa configuração a funcionar sem problemas... uso os pinos A2 e A3 como Chip Enable e Chip Select.

Já conseguiste colocar o nRF24 a funcionar sem o shield Ethernet? 
bubulindo, já coloquie o mesmo pra funcionar sim..
Quando abri o monitor serial, ele dava um erro pedindo pra verificar os fios.

Vc usa os pinos a2 e A3 para o nrf?
Poderia demonstra uma imagEm de ligação..

Grato pela resposta pessoal..
 E sim já fiz a alteração da biblioteca.

Go Up