Wifi Shield Has MAC Address of 0:0:0:0:0:0

I am using an Arduino Uno R3 SMD and a Wifi Shield R3.

When I run the ScanNetworks example it says my MAC address is 0:0:0:0:0:0

I upgraded the firmware on the Wifi Shield but it doesn't help

Any suggestions would be greatly appreciated.

Hi Joebot70,

This issue sounds familiar. For grins and giggles, can you see if the SPI interface is started as follows:

Make sure the SPI.h file is included at the top of the sketch and in the setup function drop the following command:

SPI.begin();

I think the example excludes this. While I'm not sure that this is what it is, it sounds very familiar to what I experienced. With the MEGA I had an issue similar to this until I included the right SPI initializaiton calls. Systematically, it would make sense to me as well. Also, and I mention this because I have not seen what else you have in the sketch, I would recommend reading the product info on the wifi shield. I recall some impacts to the uno that are different from the others (ex which pins should never be used because they are used to communicate with the shield).

Hope this helps.

You got code? Did you assign a mac address the the code?

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

int status = WL_IDLE_STATUS;
char ssid[] = "ECHO70";  //  your network SSID (name)
char pass[] = "****";       // your network password
int keyIndex = 0;            // your network key Index number (needed only for WEP)

unsigned int localPort = 2390;      // local port to listen for UDP packets

IPAddress timeServer(129, 6, 15, 28); // time.nist.gov NTP server

const int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message

byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets 

// A UDP instance to let us send and receive packets over UDP
WiFiUDP Udp;

void setup() 
{
  // Open serial communications and wait for port to open:
  SPI.begin();
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  // check for the presence of the shield:
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("WiFi shield not present"); 
    // don't continue:
    while(true);
  } 


  // 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 10 seconds for connection:
    delay(10000);
  }

  Serial.println("Connected to wifi");
  printWifiStatus();

  Serial.println("\nStarting connection to server...");
  Udp.begin(localPort);
}

void loop()
{
  printWifiStatus();
  printMacAddress();
  delay(1000);
  sendNTPpacket(timeServer); // send an NTP packet to a time server
    // wait to see if a reply is available
  delay(1000);  
  Serial.println( Udp.parsePacket() );
  if ( Udp.parsePacket() ) { 
    Serial.println("packet received"); 
    // We've received a packet, read the data from it
    Udp.read(packetBuffer,NTP_PACKET_SIZE);  // read the packet into the buffer

    //the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  
    // combine the four bytes (two words) into a long integer
    // this is NTP time (seconds since Jan 1 1900):
    unsigned long secsSince1900 = highWord << 16 | lowWord;  
    Serial.print("Seconds since Jan 1 1900 = " );
    Serial.println(secsSince1900);               

    // now convert NTP time into everyday time:
    Serial.print("Unix time = ");
    // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    const unsigned long seventyYears = 2208988800UL;     
    // subtract seventy years:
    unsigned long epoch = secsSince1900 - seventyYears;  
    // print Unix time:
    Serial.println(epoch);                               


    // print the hour, minute and second:
    Serial.print("The UTC time is ");       // UTC is the time at Greenwich Meridian (GMT)
    Serial.print((epoch  % 86400L) / 3600); // print the hour (86400 equals secs per day)
    Serial.print(':');  
    if ( ((epoch % 3600) / 60) < 10 ) {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
    Serial.print(':'); 
    if ( (epoch % 60) < 10 ) {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch %60); // print the second
  }
  // wait ten seconds before asking for the time again
  delay(10000); 
}

// send an NTP request to the time server at the given address 
unsigned long sendNTPpacket(IPAddress& address)
{
  //Serial.println("1");
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE); 
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  //Serial.println("2");
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49; 
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;
  
  //Serial.println("3");

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp: 		   
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  //Serial.println("4");
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  //Serial.println("5");
  Udp.endPacket(); 
  //Serial.println("6");
}


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);

  // print the received signal strength:
  long rssi = WiFi.RSSI();
  Serial.print("signal strength (RSSI):");
  Serial.print(rssi);
  Serial.println(" dBm");
}

void printMacAddress() {
  // the MAC address of your Wifi shield
  byte mac[6];                     

  // print your MAC address:
  WiFi.macAddress(mac);
  Serial.print("MAC: ");
  Serial.print(mac[5],HEX);
  Serial.print(":");
  Serial.print(mac[4],HEX);
  Serial.print(":");
  Serial.print(mac[3],HEX);
  Serial.print(":");
  Serial.print(mac[2],HEX);
  Serial.print(":");
  Serial.print(mac[1],HEX);
  Serial.print(":");
  Serial.println(mac[0],HEX);
}

So I have it checking the MAC and wireless connection every loop.

Here is what the Serial Monitor says:
Attempting to connect to SSID: ECHO70
Attempting to connect to SSID: ECHO70
Connected to wifi
SSID: ECHO70
IP Address: 0.0.0.0
signal strength (RSSI):0 dBm

Starting connection to server…
SSID: ECHO70
IP Address: 172.20.10.5
signal strength (RSSI):-25 dBm
MAC: 78:C4:E:1:99:57
0
SSID: ECHO70
IP Address: 172.20.10.5
signal strength (RSSI):0 dBm
MAC: 78:C4:E:1:99:57
0
SSID: ECHO70
IP Address: 172.20.10.5
signal strength (RSSI):0 dBm
MAC: 78:C4:E:1:99:57
0
SSID: ECHO70
IP Address: 172.20.10.5
signal strength (RSSI):0 dBm
MAC: 78:C4:E:1:99:57
0

So for some reason the it doesn’t recognize the MAC or IP to begin with but does on the next loop.
Also the router is sitting right next to Arduino board and it is getting 0dBm signal strength.

Sorry those weren't supposed to be angry faces they are : zeros.

I changed the wifi_dnld.elf files I upgraded my firmware with.

Now it gets the IP and shows the correct MAC.

The problem is it still doesn't receive a packet from the nist time server. I also tried the WebClient example and this is the result... Attempting to connect to SSID: Porknut Connected to wifi SSID: Porknut IP Address: 192.168.1.7 signal strength (RSSI):-54 dBm MAC: 78:C4:E:1:99:57

Starting connection to server...

disconnecting from server. ...

Changed the firmware files? to what? how?

I have an R3 MEGA 2560 with Arduino's WiFi shield. I'm using 1.0.5 and I updated the firmware on the WiFi shield using the wifi_dnld and wifiHD .elf files in the new firmwares folder. Using the example network scanning code, it can see the networks but doesn't register a signal strength or an encryption type, and the MAC address is 0:0:0:0:0:0 Anyone have any idea why it's not working?

thanks!

here's the first part of what the arduino returns (I changed the names of the networks)

MAC: 0:0:0:0:0:0
Scanning available networks...
** Scan Networks **
number of available networks:6
0) SSIDname0    Signal: 0 dBm   Encryption: 1) SSIDname1    Signal: 0 dBm   Encryption: 2) SSIDname2    Signal: 0 dBm   Encryption:

joebot70: Sorry those weren't supposed to be angry faces they are : zeros.

Have you solve the issue yet? Please let me know. I stuck here! Thanks.

same :(

fix for me was, that the arduino official wifi shield webpage tutorial wasnt good enough for my shield, and i needed to find tutorial for that specific shield at https://learn.adafruit.com/adafruit-winc1500-wifi-shield-for-arduino?view=all and basically use wifi101