Arduino-cli - Uploading to Unknown Chinese Arduino Boards using the Arduino Command Line Interface

In my further exploration of Arduino, today I decided to install the arduino-cli on my mac today.

https://github.com/arduino/arduino-cli

I followed the instructions for macOS but when I got to this part:

arduino-cli board list

I got the dreaded "Unknown" Fully Qualified Board Name (FQBN)

macos$ arduino-cli board list
Port                            Type              Board Name FQBN Core
/dev/cu.Bluetooth-Incoming-Port Serial Port       Unknown             
/dev/cu.usbserial-40            Serial Port (USB) Unknown   

Because of this, I got the same related-error when I tried to upload to the Arduino after successfully complying a sketch, per instruction in the link above.

Then, after an evening run next to the beach, I decided to look at the source code, so I downloaded the source and planned to modify the part of the upload / board code to bypass this error.

However, after looking at the arduino-cli source code, I thought to myself "My Arduino code uploads fine using the Arduino IDE (the GUI), so there must be a cleaner way to fix this problem with the CLI".

Then, I ran:

arduino-cli board listall

... and found there were no entries from the Arduino Uno family of boards, strangely enough. So, I then ran this command:

macos$ arduino-cli core search  uno
ID              Version Name                  
arduino:avr     1.8.2   Arduino AVR Boards    
arduino:megaavr 1.8.5   Arduino megaAVR Boards

... and lo-and-behold, there are the Arduino boards, which seemed to match the name of my Chinese Arduino UNO with "Unknown" FQBN

So, now that I found them, and they look like a possibility, I installed them for my "Unknown" FQBN Arduino clone:

arduino-cli core install arduino:avr

and the mega stuff for fun:

arduino-cli core install arduino:megaavr

After that, I listed the installed boards to make sure all was cool, and things were looking up (so I assumed):

macos$ arduino-cli board listall
Board Name                          FQBN                                      
Adafruit Circuit Playground         arduino:avr:circuitplay32u4cat            
Adafruit Circuit Playground Express arduino:samd:adafruit_circuitplayground_m0
Arduino BT                          arduino:avr:bt                            
Arduino Duemilanove or Diecimila    arduino:avr:diecimila                     
Arduino Esplora                     arduino:avr:esplora                       
Arduino Ethernet                    arduino:avr:ethernet                      
Arduino Fio                         arduino:avr:fio                           
Arduino Gemma                       arduino:avr:gemma                         
Arduino Industrial 101              arduino:avr:chiwawa                       
Arduino Leonardo                    arduino:avr:leonardo                      
Arduino Leonardo ETH                arduino:avr:leonardoeth                   
Arduino M0                          arduino:samd:mzero_bl                     
Arduino M0 Pro (Native USB Port)    arduino:samd:mzero_pro_bl                 
Arduino M0 Pro (Programming Port)   arduino:samd:mzero_pro_bl_dbg             
Arduino MKR FOX 1200                arduino:samd:mkrfox1200                   
Arduino MKR GSM 1400                arduino:samd:mkrgsm1400                   
Arduino MKR NB 1500                 arduino:samd:mkrnb1500                    
Arduino MKR Vidor 4000              arduino:samd:mkrvidor4000                 
Arduino MKR WAN 1300                arduino:samd:mkrwan1300                   
Arduino MKR WAN 1310                arduino:samd:mkrwan1310                   
Arduino MKR WiFi 1010               arduino:samd:mkrwifi1010                  
Arduino MKR1000                     arduino:samd:mkr1000                      
Arduino MKRZERO                     arduino:samd:mkrzero                      
Arduino Mega ADK                    arduino:avr:megaADK                       
Arduino Mega or Mega 2560           arduino:avr:mega                          
Arduino Micro                       arduino:avr:micro                         
Arduino Mini                        arduino:avr:mini                          
Arduino NANO 33 IoT                 arduino:samd:nano_33_iot                  
Arduino NG or older                 arduino:avr:atmegang                      
Arduino Nano                        arduino:avr:nano                          
Arduino Nano Every                  arduino:megaavr:nona4809                  
Arduino Pro or Pro Mini             arduino:avr:pro                           
Arduino Robot Control               arduino:avr:robotControl                  
Arduino Robot Motor                 arduino:avr:robotMotor                    
Arduino Tian                        arduino:samd:tian                         
Arduino Tian (MIPS Console port)    arduino:samd:tian_cons                    
Arduino Uno                         arduino:avr:uno                           
Arduino Uno WiFi                    arduino:avr:unowifi                       
Arduino Uno WiFi Rev2               arduino:megaavr:uno2018                   
Arduino Yún                         arduino:avr:yun                           
Arduino Yún Mini                    arduino:avr:yunmini                       
Arduino Zero (Native USB Port)      arduino:samd:arduino_zero_native          
Arduino Zero (Programming Port)     arduino:samd:arduino_zero_edbg            
LilyPad Arduino                     arduino:avr:lilypad                       
LilyPad Arduino USB                 arduino:avr:LilyPadUSB                    
Linino One                          arduino:avr:one  

So, after realizing I had to recompile, I did:

arduino-cli compile -b arduino:avr:uno ArdUnixTime

... and that worked OK. so I decided to upload:

arduino-cli upload -p /dev/cu.usbserial-40 --fqbn arduino:avr:uno  ArdUnixTime

and it worked, the clone accepted the upload.

Now, I have the arduino-cli working on my mac and can start to use my favorite IDE to develop Arduino sketches if I so choose and maybe can do other magical things with the Arduino now that I have the command line interface working.

Merry Christmas Arduino CLI :slight_smile:

unix time synced to the Arduino via uploading using the cli:

https://github.com/arduino/arduino-cli

Yes, I know I should have changed the LCD on the Ardunio to display a Christmas message, but decided to pass on being too geeky and eat a chicken burger instead :slight_smile:

1 Like

Reference from Arduino CLI command:

macos$ arduino-cli
Arduino Command Line Interface (arduino-cli).

Usage:
  arduino-cli [command]

Examples:
  arduino-cli <command> [flags...]

Available Commands:
  board         Arduino board commands.
  compile       Compiles Arduino sketches.
  config        Arduino Configuration Commands.
  core          Arduino Core operations.
  daemon        Run as a daemon on port 
  help          Help about any command
  lib           Arduino commands about libraries.
  sketch        Arduino CLI Sketch Commands.
  upload        Upload Arduino sketches.
  version       Shows version number of arduino CLI.

Flags:
      --additional-urls strings   Additional URLs for the board manager.
      --config-file string        The custom config file (if not specified the default will be used).
      --format string             The output format, can be [text|json]. (default "text")
  -h, --help                      help for arduino-cli
      --log-file string           Path to the file where logs will be written.
      --log-format string         The output format for the logs, can be [text|json].
      --log-level string          Messages with this level and above will be logged.
  -v, --verbose                   Print the logs on the standard output.

Use "arduino-cli [command] --help" for more information about a command.