Olá Pessoal,

tou com um probleminha,

tenho um arduino uno, uma wifi shield e um datalogger arduino.
https://www.arduino.cc/en/Main/ArduinoWiFiShield
https://www.adafruit.com/product/1141

Quando ponho no arduino a wifi shield+datalogger shield, a wifi shield deixa de ser reconhecida.... ambas usam o protocolo SPI, mas nao sei implementar isso :/ alguem podia dar uma ajuda :)

Obrigado

Exibições: 968

Responder esta

Respostas a este tópico

Oi DB, boa tarde.

Cada SPI tem um pino de CS (Chip select), e você deve usar um pino do arduino para cada dispositivo.

Wifi e SD card.

O link que você postou, mostra ul Wifi shield que já tem um SD card incorporado.

E nele mostra os dois pinos de controle da SPI  (O arduino usou a sigla SS (Slave Select), ao invés de  CS)

Neste link mostra o pino de CS do SD shield.   https://learn.adafruit.com/adafruit-data-logger-shield/shield-overview

Rui

Olá Rui,

é verdade, a wifi tem SD incorporado, mas no meu caso não serve porque nao tem real time clock (RTC) e preciso disso para me informar a hora e minutos para os registos, e dai usar a SD shield. Tive em atenção o SS, que para a wifi shield é o pino 10, e para a datalogger usei o pino 5. Por omissao é tambem o pino 10, mas como eles recomendam no datasheet mudei para outro pino (pino 5) para nao dar conflito, mas mesmo assim não dá... se testar individualmente casa placa com esses SS e CS funciona direito, mas se monto o conjunto a wifi deixa de ser reconhecida pelo arduino.... O problema deve ser simples mas ainda não o consegui resolver.... que poderá ser?

Obrigado

Caro Dinis  veja no site da Adafruit :

https://learn.adafruit.com/adafruit-data-logger-shield

  • CS - this is the Chip Select pin for the SD card. If you need to cut the trace to pin 10 because it is conflicting, this pad can be soldered to any digital pin and the software re-uploaded

CS - este é o pino Chip Select para o cartão SD.Se você precisa cortar o traço ao pino 10, porque é conflitante, este pad pode ser soldado a qualquer pino digital e o software de re-carregado

Pelo o que eu entendi, o pino CS já deve estar conectado do pino D10. (confira com um ohmimetro) . Se deseja mudar essa seleção, deverá cortar esse ligação e soldar o pino CS em outro pino que não esta sendo usado. E depois faça a alteração no programa, de acordo com a ligação que fez. Muita atenção para não danificar o módulo. 

Você fez a alteração no seu programa ?

Olá José,

sim eu fiz essa alteração, realmente de fabrica o CS está ligado ao pino 10. Cortei essa ligação com cuidado e utilizei o pino digital 5, pois o pino 10 é usado na placa wifi. Assim esse conflito já não existe. Fiz o teste com o multimetro e testei a placa so com o arduino (alterei no código o CS para 5) e funciona direito. 

Mas quando ponho a wifi + a datalogger, verifico que a wifi deixa deser reconhecida.... não percebo porque...

Que mais poderá ser?

Obrigado

Qual o programa que esta usando para testar os dois shields ?

Olá José,

o código que tenho usado para testes é este.

Antes eu montava as shields sem a alimentação do arduino, e só depois ligava a alimentação. Acontece que hoje liguei as shields com a alimentação e tudo funciona :) não sei como isto é possivel... porque antes não funcionava?

Claro que agora vou adaptar o código para a aplicação que preciso, pois esse código era só para testes...

#include <SPI.h>
#include <WiFi.h>
#include <SD.h>
#include <WiFiUdp.h>
#include <Wire.h>

char ssid[] = "TP-LINK_F52E74"; //  your network SSID (name)
char pass[] = "01623338";// your network password (use for WPA, or use as key for WEP)

unsigned int localPort = 8081;// local port to listen on

/*********************************** Initial configurations ******************************/
/*************** WiFi shield **********************/
int status = WL_IDLE_STATUS;
char packetBuffer[255]; //buffer to hold incoming packet
WiFiUDP Udp;
// ** wifi shield attached to SPI bus as follows:
// ** SCK - pin 13
// ** MOSI - pin 11
// ** MISO - pin 12
// ** CLK - pin 13
// ** SS wifi - pin 10
// ** handshake (arduino+shield) pin 7
/*********** data logger shield *******************/
File myFile;
// ** SD card attached to SPI bus as follows:
// ** MOSI - pin 11
// ** MISO - pin 12
// ** CLK - pin 13
// ** CS - pin 5
const int CS = 5;
/*********** setup function **********************/
void setup() {
  //disable SD SPI
  SPI.begin();
//  pinMode(SS,OUTPUT);
//  digitalWrite(SS,HIGH);
  Serial.begin(9600);
  checkWiFiShield();
  checkDataLogger();
  myHumidity.begin();
//  String fv = WiFi.firmwareVersion();
//  Serial.print(fv);
}

void loop() {

  //if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    //Serial.print("Received packet of size ");
    //Serial.println(packetSize);
    //Serial.print("From ");
    //IPAddress remoteIp = Udp.remoteIP();
    //Serial.print(remoteIp);
    //Serial.print(", port ");
    //Serial.println(Udp.remotePort());

    //read the packet into packetBufffer
    int len = Udp.read(packetBuffer, 255);
    if (len > 0) {
    packetBuffer[len] = 0;
    }
    Serial.print("Contents:");
    Serial.println(packetBuffer);

    //send a reply, to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    char  ReplyBuffer[40] = "Ok!";

    //Udp.write(ReplyBuffer);//packetBuffer
    Udp.write(ReplyBuffer);//packetBuffer
    Udp.endPacket();
 
  }

// open the file. note that only one file can be open at a time,
// so you have to close this one before opening another.
   myFile = SD.open("test1.txt", FILE_WRITE);

// if the file opened okay, write to it:
  if (myFile) {
    Serial.print("Writing to test1.txt...");
    myFile.println("testing 1, 2, 3.");
    // close the file:
    myFile.close();
    delay(1000);
    Serial.println("done.");
 } else {
 // if the file didn't open, print an error:
    Serial.println("error opening test.txt");
}
}

/********************* FUNCTIONS ************************/
void checkDataLogger(){
  Serial.print("Initializing SD card...");
  if (!SD.begin(CS)){
    Serial.println("initialization failed!");
    return;
  }
  Serial.println("initialization done.");  
}
/*******************************************************/
void printWifiStatus() {
  // print the SSID of the network you're attached to:
  Serial.print("SSID: ");
  Serial.println(WiFi.SSID());
  // print your WiFi shield's IP address:
  IPAddress ip = WiFi.localIP();
  Serial.print("IP Address: ");
  Serial.println(ip);
  Serial.print("localPort: ");
  Serial.println(localPort);
  // print the received signal strength:
  //long rssi = WiFi.RSSI();
  //Serial.print("signal strength (RSSI):");
  //Serial.print(rssi);
  //Serial.println(" dBm");
}
/*******************************************************/
void checkWiFiShield(){
  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present");
    // don't continue:
    while (true);
  }
  String fv = WiFi.firmwareVersion();
  if (fv != "1.1.0") {
    Serial.println("Please upgrade the firmware");
  }
  // attempt to connect to Wifi network:
  while (status != WL_CONNECTED) {
    Serial.print("Attempting to connect to SSID: ");
    Serial.println(ssid);
    // Connect to WPA/WPA2 network. Change this line if using open or WEP network:
    status = WiFi.begin(ssid,pass);
    // wait 2 seconds for connection:
    delay(2000);
  }
  Serial.println("Connected to wifi");
  printWifiStatus();
    Serial.println("\nStarting connection to server...");
  // if you get a connection, report back via serial:
  Udp.begin(localPort);
}
/*******************************************************/

Tudo OK ? Bom trabalho.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço