Arduino Home

An Open-Source platform to create digital devices and interactive objects that sense and control physical devices.

Arduino Tutorials
Arduino Projects


I was lucky enough to get a MKR WiFi 1010  to add to my Robot ARM project I am modifying for the Arduino MKR Giveaway contest and the first thing I wanted to do was to get it connected to the local network. With the MKR1000 I have been using, I have used WiFi101 from the Arduino IDE for WiFi network examples.  However, I found with the MKR WiFI 1010, the WiFi101 library is not valid and the WiFiNINA libraries should be used when using this device.  In order to use the WiFiNINA libraries with the MKR WiFi 1010, the firmware on the board for the U-BLOX (ESP32) device has to be upgrade to a minimum of v1.2.0.   The main issue I found was that the current downloadable version of the Arduino IDE from the Arduino site does not have the proper tools to perform the firmware update on the MKR WiFi 1010.  After some further searching, I found this post on the Arduino MKRWIFI1010 forum site that describes how to perform the firmware update on this board.


Firmware Update 1.2.1 - available now, with BLE mode


The other thing I noticed was that in the title of the post it mentions that the 1.2.1 adds BLE mode to the board. This certainly raised my curiosity and adds another layer of usage for this little board.


This is what I had to do to get the MKR WiFi 1010 firmware updated to run the WifiNINA libraries as well as enable BLE mode.


I.  Update MKR WiFi 1010 Firmware


1. First go to the Arduino IDE page and scroll down to where it shows "HOURLY BUILDS."


2. Download the latest build for the OS you are running,

   a. In this instance I am running Ubuntu 16.04.5 LTS.

       NOTE: The Ubuntu version can be found by running the following command:


 lsb_release -a


3. Uncompress and install the IDE on your system.

    a. On Ubuntu, move the uncompressed folder to the user home folder: '~/'.

    b. Change directories to the new Arduino IDE folder and run the Linux install scripts:


    ./ $USER


    c. This should put the Arduino IDE Icon on the Desktop.

       Double click this to launch the Arduino IDE.














4. Check the version of firmware on the MKR WiFi 1010.

    a. Navigate to File->Examples->WifiNINA->Tools->CheckFirmwareVersion

    b. Build and load this sketch

    c. In the serial terminal the version of Firmware will be shown.  If the Firmware version is less than 1.2.0 then the firmware needs to be updated.


    WiFiNINA firmware check.

     Firmware version installed: 1.0.0
     Latest firmware version available : 1.2.0

     Check result: NOT PASSED
     -  The firmware version on the module do not match the
      version required by the library, you may experience
      issues or failures.


5. To update the Firmware, navigate to File->Examples->WifiNINA->Tools->FirmwareUpdater

    a. Build and Load this sketch:

        NOTE: Do not open the serial term window. Close it if it is open.

       This places the MKR WiFi 1010 into a mode to allow the firmware to be updated; it does not update the firmware


6. Load the new firmware as follows:

    a. From Tool menu option, select: Wifi101/WifiNINA Firmware Updater

        NOTE: This will bring the Updater window



7.  In the text window under Select port of the WiFi module, select the module associated with the connected MKR module.

    a. Ex:

      Arduino MKR WiFi 1010 (/dev/ttyACM0)

    b. This should cause the Update firmware version to show in the drop-down box.

       EX: NINA firmware(1.2.1) (Arduino MKR WiFi 1010)



8. To verify the connection to the board, click the Test connection button and the connection will be verified.

    a. If successful, a pop up window will show Test successful. Otherwise, an error will show indicating what the possible issue is.


9. If the connection test succeeds, click the Update Firmware button to load the firmware update to the MKR WiFi 1010.

    a. If the firmware update succeeds, a popup window will appear with status Success.


10. Close the Updater window and load the CheckFirmwareVersion sketch again as described earlier.

    a.  The output should appear as follows.

WiFiNINA firmware check. 

Firmware version installed: 1.2.1 
Latest firmware version available : 1.2.0 

Check result: NOT PASSED 
 - The firmware version on the module do not match the 
   version required by the library, you may experience 
   issues or failures. 



        NOTE: There is currently a bug in the CheckFirmwareVersion sketch that causes it to show NOT PASSED even though the firmware version is greater than the latest firmware version listed.

        This can be corrected by editing line 46 in the CheckFirmwareVersion sketch


 if (fv == latestFv) {



  if (fv >= latestFv) {


  This should now show:

WiFiNINA firmware check. 
Firmware version installed: 1.2.1 
Latest firmware version available : 1.2.0 
Check result: PASSED



II. Add Arduino BLE Files


1.  To add the BLE examples and library files, download the files as a ZIP file from the Arduino BLE GitHub Repository.


2. Load the files to the Arduino IDE

    a. From the Arduino IDE menu, select Sketch->Include Library->Add .ZIP Library and select the .zip file that was downloaded.

    b. Once the libraries are loaded, the BLE examples will appear under:


    c. Select an example to test the BLE functionality of the MKR WiFi 1010.


3.  Test of the LED BLE example, I'm using BlueZ from a Raspberry Pi.

    a. Build and load the LED BLE example.

        NOTE: This will create a single service called ledService.

    b.  Scan for the MKR WiFi 1010 BLE connection.


sudo hcitool lescan
LE Scan ...
84:0D:8E:11:24:1E (unknown)
84:0D:8E:11:24:1E LED
4C:B1:52:34:87:31 (unknown)


     The MKR WiFI 1010 shows as : 84:0D:8E:11:24:1E LED


4. Connect to the BLE device


sudo gatttool -i hci0 -b 84:0D:8E:11:24:1E -I
[84:0D:8E:11:24:1E][LE]> connect
Attempting to connect to 84:0D:8E:11:24:1E
Connection successful



5. Using the Serial Monitor from the Arduino IDE, the MKR WiFi 1010 should report the connection succeeded.

BLE LED Peripheral 
Connected to central: 5c:f3:70:6e:13:4b


6.  List the available BLE Services using the 'primary' command

[84:0D:8E:11:24:1E][LE]> primary
attr handle: 0x0001, end grp handle: 0x0005 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0006, end grp handle: 0x0009 uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x000a, end grp handle: 0x000c uuid: 19b10000-e8f2-537e-4f6c-d104768a1214


   NOTE: Handle 0x000c is the LED Service listed in the Arduino Sketch.


7.  Check current value of LED

[84:0D:8E:11:24:1E][LE]> char-read-hnd 0x000c
Characteristic value/descriptor: 00 


8. Turn LED on:

[84:0D:8E:11:24:1E][LE]> char-write-req 0x000c 01
Characteristic value was written successfully




9. Turn LED off:

[84:0D:8E:11:24:1E][LE]> char-write-req 0x000c 00
Characteristic value was written successfully


10. MKR WiFI 1010 Serial Term output from inbound commands:

BLE LED Peripheral 
Connected to central: 5c:f3:70:6e:13:4b 
LED on 
LED off 



I have not yet tried the other BLE examples for this board, so I have no comment on them.