| 
									
										
										
										
											2016-01-01 20:51:48 +02:00
										 |  |  | ..  Copyright 2014-2016 Ivan Kravets <me@ikravets.com>
 | 
					
						
							| 
									
										
										
										
											2015-11-18 17:33:46 +02:00
										 |  |  |     Licensed under the Apache License, Version 2.0 (the "License");
 | 
					
						
							|  |  |  |     you may not use this file except in compliance with the License.
 | 
					
						
							|  |  |  |     You may obtain a copy of the License at
 | 
					
						
							|  |  |  |        http://www.apache.org/licenses/LICENSE-2.0
 | 
					
						
							|  |  |  |     Unless required by applicable law or agreed to in writing, software
 | 
					
						
							|  |  |  |     distributed under the License is distributed on an "AS IS" BASIS,
 | 
					
						
							|  |  |  |     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
					
						
							|  |  |  |     See the License for the specific language governing permissions and
 | 
					
						
							|  |  |  |     limitations under the License.
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | .. _quickstart:
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | Quick Start
 | 
					
						
							|  |  |  | ===========
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-20 01:06:25 +02:00
										 |  |  | .. note::
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  |     If you are looking for a Qucik Start for PlatformIO IDE please follow to
 | 
					
						
							|  |  |  |     :ref:`PlatformIO IDE Quick Start <atom_ide_quickstart>` page.
 | 
					
						
							| 
									
										
										
										
											2014-11-07 22:14:44 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | This tutorial introduces you to the basics of PlatformIO Command Line Interface
 | 
					
						
							|  |  |  | (CLI) workflow and shows you a creation process of a simple cross-platform
 | 
					
						
							|  |  |  | “Blink” Project. After finishing you will have a general understanding of how
 | 
					
						
							|  |  |  | to work with the multiple development platforms and embedded boards.
 | 
					
						
							| 
									
										
										
										
											2016-02-20 01:06:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | Setting Up the Project
 | 
					
						
							|  |  |  | ----------------------
 | 
					
						
							| 
									
										
										
										
											2016-02-20 01:06:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | PlatformIO CLI provides special :ref:`cmd_init` command for configuring your projects.
 | 
					
						
							|  |  |  | It allows to initialize new empty project or update existing with the new data.
 | 
					
						
							| 
									
										
										
										
											2016-02-20 01:06:25 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | What is more, :ref:`cmd_init` can be used for :ref:`ide`. It means that you will
 | 
					
						
							|  |  |  | be able to import pre-generated PlatformIO project using favourite IDE and
 | 
					
						
							|  |  |  | extend it with the professional instruments for IoT development.
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | This tutorial is based on the next popular embedded boards and development
 | 
					
						
							|  |  |  | platforms using *Arduino Wiring-based Framework*:
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. list-table::
 | 
					
						
							|  |  |  |     :header-rows:  1
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     * - Platform
 | 
					
						
							|  |  |  |       - Board
 | 
					
						
							|  |  |  |       - Framework
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     * - Atmel AVR
 | 
					
						
							|  |  |  |       - Arduino Uno (8-bit ATmega328P)
 | 
					
						
							|  |  |  |       - Arduino Wiring-based Framework
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     * - Espressif
 | 
					
						
							|  |  |  |       - NodeMCU 1.0 (32-bit ESP8266)
 | 
					
						
							|  |  |  |       - Arduino Wiring-based Framework
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     * - Teensy
 | 
					
						
							|  |  |  |       - Teensy 3.1 (32-bit ARM MK20DX256)
 | 
					
						
							|  |  |  |       - Arduino Wiring-based Framework
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Board Identifier
 | 
					
						
							|  |  |  | ----------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | :ref:`cmd_init` command requires to specify board identifier (ID/TYPE). It can
 | 
					
						
							|  |  |  | be found using `Embedded Boards Explorer <http://platformio.org/#!/boards>`_
 | 
					
						
							|  |  |  | or :ref:`cmd_boards` command. For example, using :ref:`cmd_boards` let's try
 | 
					
						
							|  |  |  | to find Teensy boards:
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | .. code-block:: bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  |     > platformio boards teensy
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Platform: teensy
 | 
					
						
							|  |  |  |     ---------------------------------------------------------------------------
 | 
					
						
							|  |  |  |     Type                  MCU            Frequency  Flash   RAM    Name
 | 
					
						
							|  |  |  |     ---------------------------------------------------------------------------
 | 
					
						
							|  |  |  |     teensy20              atmega32u4     16Mhz     31kB    2.5kB  Teensy 2.0
 | 
					
						
							|  |  |  |     teensy30              mk20dx128      48Mhz     128kB   16kB   Teensy 3.0
 | 
					
						
							|  |  |  |     teensy31              mk20dx256      72Mhz     256kB   64kB   Teensy 3.1 / 3.2
 | 
					
						
							|  |  |  |     teensylc              mkl26z64       48Mhz     62kB    8kB    Teensy LC
 | 
					
						
							|  |  |  |     teensy20pp            at90usb1286    16Mhz     127kB   8kB    Teensy++ 2.0
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | According to the table above the ID/TYPE for Teensy 3.1 is ``teensy31``. Also,
 | 
					
						
							|  |  |  | the ID for Arduino UNO is ``uno`` and for NodeMCU 1.0 (ESP-12E Module)
 | 
					
						
							|  |  |  | is ``nodemcuv2``.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Initialize Project
 | 
					
						
							|  |  |  | ------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PlatformIO ecosystem contains huge database with pre-configured settings for the
 | 
					
						
							|  |  |  | most popular embedded boards. It helps you to forget about installing
 | 
					
						
							|  |  |  | toolchains, writing build scripts or configuring uploading process. Just tell
 | 
					
						
							|  |  |  | PlatformIO the Board ID and you will receive full working project with
 | 
					
						
							|  |  |  | pre-installed instruments for the professional development.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 1.  Create empty folder where you are going to initialize new PlatformIO
 | 
					
						
							|  |  |  |     project. Then open system Terminal and change directory to it:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. code-block:: bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # create new direcotry
 | 
					
						
							|  |  |  |         > mkdir path_to_the_new_directory
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         # go to it
 | 
					
						
							|  |  |  |         > cd path_to_the_new_directory
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 2.  Initialize project for the boards mentioned above (you can specify more
 | 
					
						
							|  |  |  |     than one board at time):
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     .. code-block:: bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         > platformio init --board uno --board nodemcuv2 --board teensy31
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The current working directory *** will be used for the new project.
 | 
					
						
							|  |  |  |         You can specify another project directory via
 | 
					
						
							|  |  |  |         `platformio init -d %PATH_TO_THE_PROJECT_DIR%` command.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         The next files/directories will be created in ***
 | 
					
						
							|  |  |  |         platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
 | 
					
						
							|  |  |  |         src - Put your source files here
 | 
					
						
							|  |  |  |         lib - Put here project specific (private) libraries
 | 
					
						
							|  |  |  |         Do you want to continue? [y/N]: y
 | 
					
						
							|  |  |  |         Project has been successfully initialized!
 | 
					
						
							|  |  |  |         Useful commands:
 | 
					
						
							|  |  |  |         `platformio run` - process/build project from the current directory
 | 
					
						
							|  |  |  |         `platformio run --target upload` or `platformio run -t upload` - upload firmware to embedded board
 | 
					
						
							|  |  |  |         `platformio run --target clean` - clean project (remove compiled files)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Congrats! You have just created the first PlatformIO based Project with the
 | 
					
						
							|  |  |  | next structure:
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | * :ref:`projectconf`
 | 
					
						
							|  |  |  | * ``src`` directory where you should place source code
 | 
					
						
							|  |  |  |   (``*.h, *.c, *.cpp, *.S, *.ino, etc.``)
 | 
					
						
							|  |  |  | * ``lib`` directory can be used for the project specific (private) libraries.
 | 
					
						
							|  |  |  |   More details are located in ``lib/readme.txt`` file.
 | 
					
						
							|  |  |  | * Miscellaneous files for CVS and :ref:`ci` support.
 | 
					
						
							| 
									
										
										
										
											2014-12-03 14:56:24 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | .. note::
 | 
					
						
							|  |  |  |     If you need to add new board to the existing project please use
 | 
					
						
							|  |  |  |     :ref:`cmd_init` again.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The result of just generated ``platformio.ini``:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | .. code-block:: ini
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     #
 | 
					
						
							|  |  |  |     # Project Configuration File
 | 
					
						
							|  |  |  |     #
 | 
					
						
							|  |  |  |     # A detailed documentation with the EXAMPLES is located here:
 | 
					
						
							|  |  |  |     # http://docs.platformio.org/en/latest/projectconf.html
 | 
					
						
							|  |  |  |     #
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # A sign `#` at the beginning of the line indicates a comment
 | 
					
						
							|  |  |  |     # Comment lines are ignored.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     # Simple and base environment
 | 
					
						
							|  |  |  |     # [env:mybaseenv]
 | 
					
						
							|  |  |  |     # platform = %INSTALLED_PLATFORM_NAME_HERE%
 | 
					
						
							|  |  |  |     # framework =
 | 
					
						
							|  |  |  |     # board =
 | 
					
						
							|  |  |  |     #
 | 
					
						
							|  |  |  |     # Automatic targets - enable auto-uploading
 | 
					
						
							|  |  |  |     # targets = upload
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [env:uno]
 | 
					
						
							|  |  |  |     platform = atmelavr
 | 
					
						
							|  |  |  |     framework = arduino
 | 
					
						
							|  |  |  |     board = uno
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [env:nodemcuv2]
 | 
					
						
							|  |  |  |     platform = espressif
 | 
					
						
							|  |  |  |     framework = arduino
 | 
					
						
							|  |  |  |     board = nodemcuv2
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     [env:teensy31]
 | 
					
						
							|  |  |  |     platform = teensy
 | 
					
						
							|  |  |  |     framework = arduino
 | 
					
						
							|  |  |  |     board = teensy31
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Now, we need to create ``main.cpp`` file and place it to ``src`` folder of our
 | 
					
						
							|  |  |  | newly created project. The contents of ``src/main.cpp``:
 | 
					
						
							| 
									
										
										
										
											2014-08-11 12:20:08 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | .. code-block:: cpp
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  |     /**
 | 
					
						
							|  |  |  |      * Blink
 | 
					
						
							|  |  |  |      *
 | 
					
						
							|  |  |  |      * Turns on an LED on for one second,
 | 
					
						
							|  |  |  |      * then off for one second, repeatedly.
 | 
					
						
							|  |  |  |      */
 | 
					
						
							|  |  |  |     #include "Arduino.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void setup()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |       // initialize LED digital pin as an output.
 | 
					
						
							|  |  |  |       pinMode(LED_BUILTIN, OUTPUT);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     void loop()
 | 
					
						
							|  |  |  |     {
 | 
					
						
							|  |  |  |       // turn the LED on (HIGH is the voltage level)
 | 
					
						
							|  |  |  |       digitalWrite(LED_BUILTIN, HIGH);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // wait for a second
 | 
					
						
							|  |  |  |       delay(1000);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       // turn the LED off by making the voltage LOW
 | 
					
						
							|  |  |  |       digitalWrite(LED_BUILTIN, LOW);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |        // wait for a second
 | 
					
						
							|  |  |  |       delay(1000);
 | 
					
						
							|  |  |  |     }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The final Project structure:
 | 
					
						
							| 
									
										
										
										
											2015-01-08 20:12:42 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | .. code-block:: bash
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  |     project_dir
 | 
					
						
							|  |  |  |     ├── lib
 | 
					
						
							|  |  |  |     │   └── readme.txt
 | 
					
						
							|  |  |  |     ├── platformio.ini
 | 
					
						
							|  |  |  |     └── src
 | 
					
						
							|  |  |  |         └── main.cpp
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Process Project
 | 
					
						
							|  |  |  | ---------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | PlatformIO CLI provides special :ref:`cmd_run` command to process project. If
 | 
					
						
							|  |  |  | you call it without any arguments, PlatformIO Build System will process all
 | 
					
						
							|  |  |  | project environments (which were created per each board specified above). Here
 | 
					
						
							|  |  |  | are a few useful commands:
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | * ``platformio run``. Process (build) all environments specified in
 | 
					
						
							|  |  |  |   :ref:`projectconf`
 | 
					
						
							|  |  |  | * ``platformio run --target upload``. Build project and upload firmware to the
 | 
					
						
							|  |  |  |   all devices specified in :ref:`projectconf`
 | 
					
						
							|  |  |  | * ``platformio run --target clean``. Clean project (delete compiled objects)
 | 
					
						
							|  |  |  | * ``platformio run -e uno``. Process only ``uno`` environment
 | 
					
						
							|  |  |  | * ``platformio run -e uno -t upload``. Build project only for ``uno`` and upload
 | 
					
						
							|  |  |  |   firmware.
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | Please follow to :option:`platformio run --target` documentation for the other
 | 
					
						
							|  |  |  | targets.
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | Finally, demo which demonstrates building project and uploading firmware to
 | 
					
						
							|  |  |  | Arduino Uno:
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | .. image:: _static/platformio-demo-wiring.gif
 | 
					
						
							| 
									
										
										
										
											2014-08-09 16:31:20 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | Further Reading
 | 
					
						
							|  |  |  | ---------------
 | 
					
						
							| 
									
										
										
										
											2014-08-12 19:29:57 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-16 00:35:24 +02:00
										 |  |  | * `Project examples <https://github.com/platformio/platformio/tree/develop/examples>`_
 | 
					
						
							| 
									
										
										
										
											2016-03-02 22:01:21 +02:00
										 |  |  | * :ref:`userguide` for PlatformIO CLI commands
 |