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
Tags:
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 - 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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por