Arduino MKR1000 Getting Started

An unofficial tutorial for getting started with the MKR1000 board as there are no official one yet.

Arduino MKR1000 Getting Started

Things used in this project

Hardware components

Arduino MKR1000
Arduino MKR1000
× 1

Story

One uploaded, you should get something similar to the output on the Figure 7. The green Led should also blink each 500ms as illustrated in figure 8.

One of the main features of the MKR1000 is it’s ability to access to a WiFi network. To be able to use WIFI, you have to install the library first.

Install the WIFI 101 Library

There is many way to install the wifi101 library (you must use WIFI101 0.8.0) on the IDE.  We propose in this tutorial to install this library using the Library manager. This method DO NOT WORK as is, it needs an extra manipulation described bellow while waiting for the library update. First go to Sketch > Include Library > Manage Libraries as illustrated in Figure 9.

Search “101” and install the WiFi101 library as illustrated in the Figure 10.

IF THE INSTALLED VERSION OF THE WIFI101 IS 0.7.0

Download the library from github. open the folder “%userprofile%\documents\Documents\Arduino\libraries\WiFi101” and replace the content of the library with the content of the “WiFi101-master” folder in the downloaded zip

To check the WiFi101 library, open the Sketch located at Examples > WiFi101 > CheckWifi101FrimwareVersion as illustrated in Figure 11.

You can use the flowing code to start a web server that can turn on and off the MKR1000 Led. this code is an adaptation from the example from the WiFi101 library called “SimpleWebServerWiFi“. Once uploaded, you should see the address of the server in the Serial Monitor. Open it on any browser and you can enjoy executing the examples of the WiFi101 library.

#include <WiFi101.h>
#include <WiFiClient.h>
#include <WiFiServer.h>
#include <WiFiSSLClient.h>
#include <WiFiUdp.h>
 
/*
 * This example is modified from the original file 
 * https://github.com/arduino-libraries/WiFi101/blob/master/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino
 */
#include <SPI.h>
#include <WiFi101.h>
 
char ssid[] = "yourNetworkSSID";      //  your network SSID (name)
char pass[] = "yourNetworkPassword";   // your network password
int keyIndex = 0;                 // your network key Index number (needed only for WEP)
int ledpin = 6;
bool val = true;
 
int status = WL_IDLE_STATUS;
WiFiServer server(80);
 
void setup() {
  Serial.begin(9600);      // initialize serial communication
  Serial.print("Start Serial ");
  pinMode(ledpin, OUTPUT);      // set the LED pin mode
  // Check for the presence of the shield
  Serial.print("WiFi101 shield: ");
  if (WiFi.status() == WL_NO_SHIELD) {
    Serial.println("NOT PRESENT");
    return; // don't continue
  }
  Serial.println("DETECTED");
  // attempt to connect to Wifi network:
  while ( status != WL_CONNECTED) {
    digitalWrite(ledpin, LOW);
    Serial.print("Attempting to connect to Network named: ");
    Serial.println(ssid);                   // print the network name (SSID);
    digitalWrite(ledpin, HIGH);
    // 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);
  }
  server.begin();                           // start the web server on port 80
  printWifiStatus();                        // you're connected now, so print out the status
  digitalWrite(ledpin, HIGH);
}
void loop() {
  WiFiClient client = server.available();   // listen for incoming clients
 
  if (client) {                             // if you get a client,
    Serial.println("new client");           // print a message out the serial port
    String currentLine = "";                // make a String to hold incoming data from the client
    while (client.connected()) {            // loop while the client's connected
      if (client.available()) {             // if there's bytes to read from the client,
        char c = client.read();             // read a byte, then
        Serial.write(c);                    // print it out the serial monitor
        if (c == '\n') {                    // if the byte is a newline character
 
          // if the current line is blank, you got two newline characters in a row.
          // that's the end of the client HTTP request, so send a response:
          if (currentLine.length() == 0) {
            // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK)
            // and a content-type so the client knows what's coming, then a blank line:
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println();
 
            // the content of the HTTP response follows the header:
            client.print("Click <a href=\"/H\">here</a> turn the LED on pin 9 on<br>");
            client.print("Click <a href=\"/L\">here</a> turn the LED on pin 9 off<br>");
 
            // The HTTP response ends with another blank line:
            client.println();
            // break out of the while loop:
            break;
          }
          else {      // if you got a newline, then clear currentLine:
            currentLine = "";
          }
        }
        else if (c != '\r') {    // if you got anything else but a carriage return character,
          currentLine += c;      // add it to the end of the currentLine
        }
 
        // Check to see if the client request was "GET /H" or "GET /L":
        if (currentLine.endsWith("GET /H")) {
          digitalWrite(ledpin, HIGH);               // GET /H turns the LED on
        }
        if (currentLine.endsWith("GET /L")) {
          digitalWrite(ledpin, LOW);                // GET /L turns the LED off
        }
      }
    }
    // close the connection:
    client.stop();
    Serial.println("client disonnected");
  }
}
 
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");
  // print where to go in a browser:
  Serial.print("To see this page in action, open a browser to http://");
  Serial.println(ip);
}

Troubleshoot

As the MKR1000 still brand new, there is some issues.

There is a Topic in Arduino forum about the wifi101 that may help. Another Topic discuss the IDE related issues.

If you have issues with the Arduino/Genuino MKR1000 port, you can use the Zero port. Note that the official documentation of the Zero board commands using the Programming Port, However, it do not work for the MKR1000. So i recommend using the Native USB Port.

I would recommend to you to try 3 things if your device is not detected by windows:

  • Verify that the USB cable that you are using supports data. The D+ and D- data lines are missing in some charge only cables. For that, try to connect your android device or another board using the USB cable and see if windows can detect it.
  • Verify that the USB port in your computer. For that, simply try to plug device in an other USB port and wait some second to see if there is any change in the windows device manager. Sometime, unplugging all the USB devices and restarting windows resolve this issue.
  • Verify that the driver is installed correctly. Open the Device manager > Ports, unplug the MKR1000 and plug it, if you see a new device appear that is not recolonized as MKR1000, right click on this device and click on update the driver. Click on choose the driver from my computer than choose the Arduino drivers folder. This should update the driver and detect the device as MKR1000.

Advanced Pins description

An interesting pins description is illustrated in Figure13. This description was included in the code (then removed) from SAMD; It was used for their experiments on the MKR1000. The commit is available on github SAMD repository.

 


About The Author

Ibrar Ayyub

I am an experienced technical writer holding a Master's degree in computer science from BZU Multan, Pakistan University. With a background spanning various industries, particularly in home automation and engineering, I have honed my skills in crafting clear and concise content. Proficient in leveraging infographics and diagrams, I strive to simplify complex concepts for readers. My strength lies in thorough research and presenting information in a structured and logical format.

Follow Us:
LinkedinTwitter

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top