Merge branch 'release/v3.1.0'

This commit is contained in:
Ivan Kravets
2016-09-19 21:12:56 +03:00
77 changed files with 1998 additions and 431 deletions

View File

@ -12,11 +12,6 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
[run]
omit =
platformio/builder/*
source = platformio
[report] [report]
# Regexes for lines to exclude from consideration # Regexes for lines to exclude from consideration
exclude_lines = exclude_lines =

View File

@ -4,6 +4,66 @@ Release Notes
PlatformIO 3.0 PlatformIO 3.0
-------------- --------------
3.1.0 (2016-09-19)
~~~~~~~~~~~~~~~~~~
* New! Dynamic variables/templates for `Project Configuration File "platformio.ini" <http://docs.platformio.org/en/stable/projectconf.html>`__
(`issue #705 <https://github.com/platformio/platformio/issues/705>`_)
* Summary about processed environments
(`issue #777 <https://github.com/platformio/platformio/issues/777>`_)
* Implemented LocalCache system for API and improved a work in off-line mode
* Improved Project Generator when custom ``--project-option`` is passed to
`platformio init <http://docs.platformio.org/en/stable/userguide/cmd_init.html>`__
command
* Deprecated ``lib_force`` option, please use `lib_deps <http://docs.platformio.org/en/stable/projectconf.html#lib-deps>`__ instead
* Return valid exit code from ``plaformio test`` command
* Fixed Project Generator for CLion IDE using Windows OS
(`issue #785 <https://github.com/platformio/platformio/issues/785>`_)
* Fixed SSL Server-Name-Indication for Python < 2.7.9
(`issue #774 <https://github.com/platformio/platformio/issues/774>`_)
-------
* Development platform `Espressif 8266 <https://github.com/platformio/platform-espressif8266>`__
+ Add support for `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
+ Created `staging <http://docs.platformio.org/en/stable/platforms/espressif8266.html#using-arduino-framework-with-staging-version>`__
branch to work with development version of Arduino Framework
* Development platform `Freescale Kinetis <https://github.com/platformio/platform-freescalekinetis>`__
+ Added support for new boards: FRDM-KL26Z, FRDM-KL27Z, FRDM-KL43Z, Hexiwear
* Development platform `Nordic nRF51 <https://github.com/platformio/platform-nordicnrf51>`__
+ Added support for new boards: Seeed Arch BLE, Seeed Arch Link, Switch
Science mbed TY51822r3, y5 nRF51822 mbug, JKSoft Wallbot BLE
* Development platform `NXP LPC <https://github.com/platformio/platform-nxplpc>`__
+ Added support for new boards: ARM mbed LPC11U24 (+CAN), Bambino-210E,
CoCo-ri-Co!, DipCortex M3, LPCXpresso11U68, LPCXpresso824-MAX, mBuino,
MicroNFCBoard, NXP LPC11C24, NXP LPC11U34, EA LPC11U35 QuickStart Board,
NXP LPC11U37, NXP LPC2368, NXP LPC2460, NXP LPC800-MAX, Seeed Arch GPRS V2,
Seeed Xadow M0, Smeshlink xbed LPC1768, Switch Science mbed LPC824
* Development platform `ST STM32 <https://github.com/platformio/platform-ststm32>`__
+ New Arduino framework for ST STM32 -
`STM32Duino <https://github.com/rogerclarkmelbourne/Arduino_STM32>`__.
Supported boards: BluePill F103C8, Generic STM32F103C8, Generic STM32F103R8,
Generic STM32F103RB, Generic STM32F103RC, Generic STM32F103RE, Olimexino STM32
+ Added support for new ARM mbed based boards: ST 32F746GDISCOVER,
MultiTech mDot, ST Nucleo F207ZG, ST Nucleo F429ZI, ST Nucleo F446ZE,
ST Nucleo F746ZG, ST Nucleo F767ZI, ST Nucleo L011K4, ST Nucleo L432KC,
Seeed Arch Max
* Development platform `Teensy <https://github.com/platformio/platform-teensy>`__
+ Added support for Teensy 3.5 and 3.6 boards
+ Updated Arduino Framework for Teensy to v130
3.0.1 (2016-09-08) 3.0.1 (2016-09-08)
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~

View File

@ -18,7 +18,7 @@ PlatformIO
.. image:: https://img.shields.io/pypi/l/platformio.svg .. image:: https://img.shields.io/pypi/l/platformio.svg
:target: https://pypi.python.org/pypi/platformio/ :target: https://pypi.python.org/pypi/platformio/
:alt: License :alt: License
.. image:: https://img.shields.io/community/PlatformIO.png .. image:: https://img.shields.io/PlatformIO/Community.png
:alt: Community Forums :alt: Community Forums
:target: https://community.platformio.org :target: https://community.platformio.org
.. image:: https://img.shields.io/PlatformIO/Plus.png?color=orange .. image:: https://img.shields.io/PlatformIO/Plus.png?color=orange

View File

@ -23,6 +23,7 @@ Here are recent articles/reviews about PlatformIO:
2016 2016
^^^^ ^^^^
* Sep 12, 2016 - **Pedro Minatel** - `OTA Como programar o ESP8266 pelo WiFi no platformIO (OTA programming for ESP8266 via Wi-Fi using PlatformIO, Portuguese) <http://pedrominatel.com.br/esp8266/ota-como-programar-o-esp8266-pelo-wifi-no-platformio/>`_
* Sep 2, 2016 - **Tinkerman** `ESP8266: Optimizing files for SPIFFS with Gulp <http://tinkerman.cat/optimizing-files-for-spiffs-with-gulp/>`_ * Sep 2, 2016 - **Tinkerman** `ESP8266: Optimizing files for SPIFFS with Gulp <http://tinkerman.cat/optimizing-files-for-spiffs-with-gulp/>`_
* Aug 28, 2016 - **Tom Parker** `Using the BBC micro:bit with PlatformIO <http://www.lshift.net/blog/2016/08/28/using-the-bbc-microbit-with-platformio/>`_ * Aug 28, 2016 - **Tom Parker** `Using the BBC micro:bit with PlatformIO <http://www.lshift.net/blog/2016/08/28/using-the-bbc-microbit-with-platformio/>`_
* Aug 24, 2016 - **Primal Cortex** `Cloud based continuous integration and delivery for IOT using PlatformIO <https://primalcortex.wordpress.com/2016/08/24/cloud-based-continuous-integration-and-delivery-for-iot-using-platformio/>`_ * Aug 24, 2016 - **Primal Cortex** `Cloud based continuous integration and delivery for IOT using PlatformIO <https://primalcortex.wordpress.com/2016/08/24/cloud-based-continuous-integration-and-delivery-for-iot-using-platformio/>`_

View File

@ -55,7 +55,7 @@ Library Manager
Used in demo Used in demo
~~~~~~~~~~~~ ~~~~~~~~~~~~
1. :ref:`userguide_lib` 1. :ref:`cmd_lib`
2. :ref:`platformio lib search 1-wire <cmd_lib_search>` command 2. :ref:`platformio lib search 1-wire <cmd_lib_search>` command
3. :ref:`platformio lib install 54 <cmd_lib_install>` command 3. :ref:`platformio lib install 54 <cmd_lib_install>` command
4. :ref:`platformio lib search -f mbed <cmd_lib_search>` command 4. :ref:`platformio lib search -f mbed <cmd_lib_search>` command

View File

@ -163,6 +163,6 @@ Allows to override setting :ref:`setting_enable_telemetry`.
Allows to override setting :ref:`setting_force_verbose`. Allows to override setting :ref:`setting_force_verbose`.
.. envvar:: PLATFORMIO_SETTING_DISABLE_SSL .. envvar:: PLATFORMIO_SETTING_ENABLE_SSL
Allows to override setting :ref:`setting_disable_ssl`. Allows to override setting :ref:`setting_enable_ssl`.

View File

@ -45,6 +45,9 @@ Platforms
* - :ref:`platform_nordicnrf51` * - :ref:`platform_nordicnrf51`
- The Nordic nRF51 Series is a family of highly flexible, multi-protocol, system-on-chip (SoC) devices for ultra-low power wireless applications. nRF51 Series devices support a range of protocol stacks including Bluetooth Smart (previously called Bluetooth low energy), ANT and proprietary 2.4GHz protocols such as Gazell. - The Nordic nRF51 Series is a family of highly flexible, multi-protocol, system-on-chip (SoC) devices for ultra-low power wireless applications. nRF51 Series devices support a range of protocol stacks including Bluetooth Smart (previously called Bluetooth low energy), ANT and proprietary 2.4GHz protocols such as Gazell.
* - :ref:`platform_ststm32`
- The STM32 family of 32-bit Flash MCUs based on the ARM Cortex-M processor is designed to offer new degrees of freedom to MCU users. It offers a 32-bit product range that combines very high performance, real-time capabilities, digital signal processing, and low-power, low-voltage operation, while maintaining full integration and ease of development.
* - :ref:`platform_teensy` * - :ref:`platform_teensy`
- Teensy is a complete USB-based microcontroller development system, in a very small footprint, capable of implementing many types of projects. All programming is done via the USB port. No special programmer is needed, only a standard USB cable and a PC or Macintosh with a USB port. - Teensy is a complete USB-based microcontroller development system, in a very small footprint, capable of implementing many types of projects. All programming is done via the USB port. No special programmer is needed, only a standard USB cable and a PC or Macintosh with a USB port.
@ -856,7 +859,7 @@ Espressif
- ESP8266 - ESP8266
- 80 MHz - 80 MHz
- 4096 Kb - 4096 Kb
- 50 Kb - 80 Kb
* - ``phoenix_v1`` * - ``phoenix_v1``
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_ - `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
@ -906,6 +909,68 @@ Fubarino
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
Generic
~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``bluepill_f103c8``
- `BluePill F103C8 <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8T6
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103C8``
- `STM32F103C8 (20k RAM. 64k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103CB``
- `STM32F103CB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html>`_
- STM32F103CB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103R8``
- `STM32F103R8 (20k RAM. 64 Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103r8.html>`_
- STM32F103R8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103RB``
- `STM32F103RB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rb.html>`_
- STM32F103RB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103RC``
- `STM32F103RC (48k RAM. 256k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rc.html>`_
- STM32F103RC
- 72 MHz
- 256 Kb
- 48 Kb
* - ``genericSTM32F103RE``
- `STM32F103RE (64k RAM. 512k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103re.html>`_
- STM32F103RE
- 72 MHz
- 512 Kb
- 64 Kb
Generic ATTiny Generic ATTiny
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
@ -1233,6 +1298,13 @@ Olimex
- Flash - Flash
- RAM - RAM
* - ``maple``
- `Olimexino STM32 <https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/>`_
- STM32F103RB_MAPLE
- 72 MHz
- 128 Kb
- 16.6015625 Kb
* - ``modwifi`` * - ``modwifi``
- `Olimex MOD-WIFI-ESP8266(-DEV) <https://www.olimex.com/Products/IoT/MOD-WIFI-ESP8266-DEV/open-source-hardware>`_ - `Olimex MOD-WIFI-ESP8266(-DEV) <https://www.olimex.com/Products/IoT/MOD-WIFI-ESP8266-DEV/open-source-hardware>`_
- ESP8266 - ESP8266
@ -1590,6 +1662,13 @@ SparkFun
- Flash - Flash
- RAM - RAM
* - ``sparkfunBlynk``
- `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
- ESP8266
- 80 MHz
- 4096 Kb
- 80 Kb
* - ``sparkfun_digitalsandbox`` * - ``sparkfun_digitalsandbox``
- `SparkFun Digital Sandbox <https://www.sparkfun.com/products/12651>`_ - `SparkFun Digital Sandbox <https://www.sparkfun.com/products/12651>`_
- ATMEGA328P - ATMEGA328P
@ -1749,6 +1828,20 @@ Teensy
- 256 Kb - 256 Kb
- 64 Kb - 64 Kb
* - ``teensy35``
- `Teensy 3.5 <https://www.pjrc.com>`_
- MK64FX512
- 120 MHz
- 512 Kb
- 192 Kb
* - ``teensy36``
- `Teensy 3.6 <https://www.pjrc.com>`_
- MK66FX1M0
- 180 MHz
- 1024 Kb
- 256 Kb
* - ``teensylc`` * - ``teensylc``
- `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_ - `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_
- MKL26Z64 - MKL26Z64

View File

@ -170,6 +170,26 @@ Delta
- 256 Kb - 256 Kb
- 32 Kb - 32 Kb
Elektor Labs
~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``elektor_cocorico``
- `CoCo-ri-Co! <https://developer.mbed.org/platforms/CoCo-ri-Co/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
Embedded Artists Embedded Artists
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
@ -184,7 +204,7 @@ Embedded Artists
- RAM - RAM
* - ``lpc11u35`` * - ``lpc11u35``
- `Embedded Artists LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_ - `EA LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- LPC11U35 - LPC11U35
- 48 MHz - 48 MHz
- 64 Kb - 64 Kb
@ -259,6 +279,27 @@ Freescale
- 128 Kb - 128 Kb
- 16 Kb - 16 Kb
* - ``frdm_kl26z``
- `Freescale Kinetis FRDM-KL26Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl16-and-kl26-mcus-up-to-128-kb-flash:FRDM-KL26Z>`_
- MKL26Z128VLH4
- 48 MHz
- 128 Kb
- 16 Kb
* - ``frdm_kl27z``
- `Freescale Kinetis FRDM-KL27Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl17-and-kl27-mcus:FRDM-KL27Z>`_
- MKL27Z64VLH4
- 48 MHz
- 64 Kb
- 16 Kb
* - ``frdm_kl43z``
- `Freescale Kinetis FRDM-KL43Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl43-kl33-kl27-kl17-and-kl13-mcus:FRDM-KL43Z>`_
- MKL43Z256VLH4
- 48 MHz
- 256 Kb
- 32 Kb
* - ``frdm_kl46z`` * - ``frdm_kl46z``
- `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_ - `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_
- MKL46Z256VLL4 - MKL46Z256VLL4
@ -266,6 +307,26 @@ Freescale
- 256 Kb - 256 Kb
- 32 Kb - 32 Kb
GHI Electronics
~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``oc_mbuino``
- `mBuino <https://developer.mbed.org/platforms/mBuino/>`_
- LPC11U24
- 50 MHz
- 32 Kb
- 10 Kb
Generic Generic
~~~~~~~ ~~~~~~~
@ -299,13 +360,53 @@ JKSoft
- Flash - Flash
- RAM - RAM
* - ``wallBotBLE`` * - ``wallbot_ble``
- `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_ - `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_
- NRF51822 - NRF51822
- 16 MHz - 16 MHz
- 128 Kb - 128 Kb
- 16 Kb - 16 Kb
Micromint
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc4330_m4``
- `Bambino-210E <https://developer.mbed.org/platforms/Micromint-Bambino-210E/>`_
- LPC4330
- 204 MHz
- 8192 Kb
- 264 Kb
MikroElektronika
~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``hexiwear``
- `Hexiwear <https://developer.mbed.org/platforms/Hexiwear/>`_
- MK64FN1M0VDC12
- 120 MHz
- 1024 Kb
- 256 Kb
MultiTech MultiTech
~~~~~~~~~ ~~~~~~~~~
@ -319,6 +420,13 @@ MultiTech
- Flash - Flash
- RAM - RAM
* - ``mts_mdot_f405rg``
- `MultiTech mDot <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
- 100 MHz
- 512 Kb
- 128 Kb
* - ``mts_mdot_f411re`` * - ``mts_mdot_f411re``
- `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_ - `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6 - STM32F411RET6
@ -359,6 +467,13 @@ NXP
- Flash - Flash
- RAM - RAM
* - ``lpc11c24``
- `NXP LPC11C24 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-m0-cores:LPC11C24FBD48>`_
- LPC11C24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u24`` * - ``lpc11u24``
- `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_ - `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_
- LPC11U24 - LPC11U24
@ -366,6 +481,34 @@ NXP
- 32 Kb - 32 Kb
- 8 Kb - 8 Kb
* - ``lpc11u24_301``
- `ARM mbed LPC11U24 (+CAN) <https://developer.mbed.org/handbook/mbed-NXP-LPC11U24>`_
- LPC11U24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u34_421``
- `NXP LPC11U34 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-lqfp48-package:LPC11U34FBD48?lang_cd=en>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 8 Kb
* - ``lpc11u37_501``
- `NXP LPC11U37 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/128kb-flash-10kb-sram-lqfp48-package:LPC11U37FBD48?lang_cd=en>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``lpc11u68``
- `LPCXpresso11U68 <https://developer.mbed.org/platforms/LPCXpresso11U68/>`_
- LPC11U68
- 50 MHz
- 256 Kb
- 36 Kb
* - ``lpc1549`` * - ``lpc1549``
- `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_ - `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_
- LPC1549 - LPC1549
@ -380,6 +523,41 @@ NXP
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
* - ``lpc2368``
- `NXP LPC2368 <https://developer.mbed.org/platforms/mbed-LPC2368/>`_
- LPC2368
- 72 MHz
- 512 Kb
- 58 Kb
* - ``lpc2460``
- `NXP LPC2460 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-arm7-arm9-mcus/lpc-arm7-mcus/lpc2100-200-300-400/flashless-16-bit-32-bit-microcontroller-ethernet-can-isp-iap-usb-2.0-device-host-otg-external-memory-interface:LPC2460FBD208>`_
- LPC2460
- 72 MHz
- 64 Kb
- 16 Kb
* - ``lpc812``
- `NXP LPC800-MAX <https://developer.mbed.org/platforms/NXP-LPC800-MAX/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
* - ``lpc824``
- `LPCXpresso824-MAX <https://developer.mbed.org/platforms/LPCXpresso824-MAX/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``micronfcboard``
- `MicroNFCBoard <https://developer.mbed.org/platforms/MicroNFCBoard/>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 10 Kb
Nordic Nordic
~~~~~~ ~~~~~~
@ -530,6 +708,13 @@ ST
- 1024 Kb - 1024 Kb
- 384 Kb - 384 Kb
* - ``disco_f746ng``
- `ST 32F746GDISCOVERY <http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html>`_
- STM32F746NGH6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``disco_l053c8`` * - ``disco_l053c8``
- `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_ - `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_
- STM32L053C8T6 - STM32L053C8T6
@ -593,6 +778,13 @@ ST
- 128 Kb - 128 Kb
- 20 Kb - 20 Kb
* - ``nucleo_f207zg``
- `ST Nucleo F207ZG <https://developer.mbed.org/platforms/ST-Nucleo-F207ZG/>`_
- STM32F207ZGT6
- 120 MHz
- 1024 Kb
- 128 Kb
* - ``nucleo_f302r8`` * - ``nucleo_f302r8``
- `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_ - `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_
- STM32F302R8T6 - STM32F302R8T6
@ -642,6 +834,13 @@ ST
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``nucleo_f429zi``
- `ST Nucleo F429ZI <https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/>`_
- STM32F429ZIT6
- 180 MHz
- 2048 Kb
- 256 Kb
* - ``nucleo_f446re`` * - ``nucleo_f446re``
- `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_ - `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_
- STM32F446RET6 - STM32F446RET6
@ -649,6 +848,34 @@ ST
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``nucleo_f446ze``
- `ST Nucleo F446ZE <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F446ZET6
- 180 MHz
- 512 Kb
- 128 Kb
* - ``nucleo_f746zg``
- `ST Nucleo F746ZG <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F746ZGT6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``nucleo_f767zi``
- `ST Nucleo F767ZI <https://developer.mbed.org/platforms/ST-Nucleo-F767ZI/>`_
- STM32F746ZGT6
- 216 MHz
- 2048 Kb
- 512 Kb
* - ``nucleo_l011k4``
- `ST Nucleo L011K4 <https://developer.mbed.org/platforms/ST-Nucleo-L011K4/>`_
- STM32L011K4T6
- 32 MHz
- 16 Kb
- 2 Kb
* - ``nucleo_l031k6`` * - ``nucleo_l031k6``
- `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_ - `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_
- STM32L031K6T6 - STM32L031K6T6
@ -677,6 +904,13 @@ ST
- 512 Kb - 512 Kb
- 80 Kb - 80 Kb
* - ``nucleo_l432kc``
- `ST Nucleo L432KC <https://developer.mbed.org/platforms/ST-Nucleo-L432KC/>`_
- STM32L432KCU6
- 80 MHz
- 256 Kb
- 64 Kb
* - ``nucleo_l476rg`` * - ``nucleo_l476rg``
- `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_ - `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_
- STM32L476RGT6 - STM32L476RGT6
@ -697,27 +931,55 @@ SeeedStudio
- Flash - Flash
- RAM - RAM
* - ``seeedArchMax`` * - ``seeedArchBLE``
- `SeeedStudio Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_ - `Seeed Arch BLE <https://developer.mbed.org/platforms/Seeed-Arch-BLE/>`_
- STM32F407VET6 - NRF51822
- 168 MHz - 16 MHz
- 512 Kb - 128 Kb
- 192 Kb - 16 Kb
* - ``seeedTinyBLE`` * - ``seeedArchGPRS``
- `SeeedStudio Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_ - `Seeed Arch GPRS V2 <https://www.seeedstudio.com/Arch-GPRS-V2-p-2026.html>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``seeedArchLink``
- `Seeed Arch Link <https://developer.mbed.org/platforms/Seeed-Arch-Link/>`_
- NRF51822 - NRF51822
- 16 MHz - 16 MHz
- 256 Kb - 256 Kb
- 16 Kb - 16 Kb
* - ``seeeduinoArchPro`` * - ``seeedArchMax``
- `SeeedStudio Seeeduino-Arch-Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_ - `Seeed Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb
- 192 Kb
* - ``seeedArchPro``
- `Seeed Arch Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
- LPC1768 - LPC1768
- 96 MHz - 96 MHz
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
* - ``seeedTinyBLE``
- `Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``xadow_m0``
- `Seeed Xadow M0 <https://developer.mbed.org/platforms/Seeed-Xadow-M0/>`_
- LPC11U35
- 48 MHz
- 64 Kb
- 10 Kb
Silicon Labs Silicon Labs
~~~~~~~~~~~~ ~~~~~~~~~~~~
@ -773,6 +1035,26 @@ Silicon Labs
- 32 Kb - 32 Kb
- 4 Kb - 4 Kb
Smeshlink
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``xbed_lpc1768``
- `Smeshlink xbed LPC1768 <https://developer.mbed.org/platforms/xbed-LPC1768/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 32 Kb
Solder Splash Labs Solder Splash Labs
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
@ -793,6 +1075,26 @@ Solder Splash Labs
- 32 Kb - 32 Kb
- 8 Kb - 8 Kb
SolderSplash Labs
~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc1347``
- `DipCortex M3 <https://developer.mbed.org/platforms/DipCortex-M3/>`_
- LPC1347
- 72 MHz
- 64 Kb
- 12 Kb
Switch Science Switch Science
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
@ -820,6 +1122,20 @@ Switch Science
- 32 Kb - 32 Kb
- 4 Kb - 4 Kb
* - ``ssci824``
- `Switch Science mbed LPC824 <https://developer.mbed.org/platforms/Switch-Science-mbed-LPC824/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``ty51822r3``
- `Switch Science mbed TY51822r3 <https://developer.mbed.org/platforms/Switch-Science-mbed-TY51822r3/>`_
- NRF51822
- 32 MHz
- 256 Kb
- 32 Kb
Teensy Teensy
~~~~~~ ~~~~~~
@ -860,4 +1176,24 @@ u-blox
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
y5 design
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``nrf51822_y5_mbug``
- `y5 nRF51822 mbug <https://developer.mbed.org/platforms/Y5-NRF51822-MBUG/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
.. include:: mbed_extra.rst .. include:: mbed_extra.rst

View File

@ -15,8 +15,8 @@
* Cross-platform build system without external dependencies to the OS software: * Cross-platform build system without external dependencies to the OS software:
- 250+ embedded boards - 300+ embedded boards
- 20+ development platforms - 15+ development platforms
- 10+ frameworks - 10+ frameworks
* C/C++ Intelligent code completion * C/C++ Intelligent code completion

View File

@ -18,8 +18,8 @@ PlatformIO IDE is the next-generation integrated development environment for IoT
* Cross-platform build system without external dependencies to the OS software: * Cross-platform build system without external dependencies to the OS software:
- 250+ embedded boards - 300+ embedded boards
- 20+ development platforms - 15+ development platforms
- 10+ frameworks - 10+ frameworks
* C/C++ Intelligent Code Completion * C/C++ Intelligent Code Completion

View File

@ -167,6 +167,8 @@ For upgrading ``platformio`` to the latest version:
pip install -U platformio pip install -U platformio
.. _installation_develop:
Development Version Development Version
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~

View File

@ -196,7 +196,7 @@ dash. `Semantic Versioning <http://semver.org>`_ IS RECOMMENDED.
field is defined. field is defined.
|PIOAPICR| will use the |PIOAPICR| will use the
`CVS <http://en.wikipedia.org/wiki/Concurrent_Versions_System>`_ revision from `VCS <http://en.wikipedia.org/wiki/Concurrent_Versions_System>`_ revision from
the latest commit as "current version". For example, ``13`` (*SVN*) or first the latest commit as "current version". For example, ``13`` (*SVN*) or first
10 chars of *SHA* digest ``e4564b7da4`` (*Git*). If :ref:`libjson_repository` 10 chars of *SHA* digest ``e4564b7da4`` (*Git*). If :ref:`libjson_repository`
``branch`` is not specified, then default branch will be used. ``branch`` is not specified, then default branch will be used.

View File

@ -44,34 +44,63 @@ If a library source code is located at `GitHub <https://github.com>`_, then
you **need to specify** only these fields in the :ref:`library_config`: you **need to specify** only these fields in the :ref:`library_config`:
* :ref:`libjson_name` * :ref:`libjson_name`
* :ref:`libjson_version` (is not required, but highly recommended for new :ref:`librarymanager`)
* :ref:`libjson_keywords` * :ref:`libjson_keywords`
* :ref:`libjson_description` * :ref:`libjson_description`
* :ref:`libjson_repository` * :ref:`libjson_repository`
|PIOAPICR| will populate the rest fields, like :ref:`libjson_version` or |PIOAPICR| will populate the rest fields, like :ref:`libjson_authors` with an
:ref:`libjson_authors` with an actual information from *GitHub*. actual information from *GitHub*.
Example: Example, `DallasTemperature <http://platformio.org/lib/show/54/DallasTemperature/manifest>`_:
.. code-block:: javascript .. code-block:: javascript
{ {
"name": "IRremote", "name": "DallasTemperature",
"keywords": "infrared, ir, remote", "keywords": "onewire, 1-wire, bus, sensor, temperature",
"description": "Send and receive infrared signals with multiple protocols", "description": "Arduino Library for Dallas Temperature ICs (DS18B20, DS18S20, DS1822, DS1820)",
"repository": "repository":
{ {
"type": "git", "type": "git",
"url": "https://github.com/shirriff/Arduino-IRremote.git" "url": "https://github.com/milesburton/Arduino-Temperature-Control-Library.git"
}, },
"authors":
[
{
"name": "Miles Burton",
"email": "miles@mnetcs.com",
"url": "http://www.milesburton.com",
"maintainer": true
},
{
"name": "Tim Newsome",
"email": "nuisance@casualhacker.net"
},
{
"name": "Guil Barros",
"email": "gfbarros@bappos.com"
},
{
"name": "Rob Tillaart",
"email": "rob.tillaart@gmail.com"
}
],
"dependencies":
{
"name": "OneWire",
"authors": "Paul Stoffregen",
"frameworks": "arduino"
},
"version": "3.7.7",
"frameworks": "arduino", "frameworks": "arduino",
"platforms": "atmelavr" "platforms": "*"
} }
Under CVS (SVN/GIT) Under VCS (SVN/GIT)
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
|PIOAPICR| can operate with a library source code that is under *CVS* control. |PIOAPICR| can operate with a library source code that is under *VCS* control.
The list of **required** fields in the :ref:`library_config` will look like: The list of **required** fields in the :ref:`library_config` will look like:
* :ref:`libjson_name` * :ref:`libjson_name`

View File

@ -20,14 +20,16 @@ Hg, SVN). It makes it exceedingly simple to find, install and keep libraries
up-to-date. PlatformIO Library Manager supports up-to-date. PlatformIO Library Manager supports
`Semantic Versioning <http://semver.org>`_ and its rules. `Semantic Versioning <http://semver.org>`_ and its rules.
There 2 options how to find library: There are 2 options how to find library:
* `Web Library Search <http://platformio.org/lib>`__
* :ref:`Command Line Interface <cmd_lib_search>` * :ref:`Command Line Interface <cmd_lib_search>`
* `Web-based Library Search <http://platformio.org/lib>`__
*PlatformIO Library Manager* allows to manage different library storages using You can manage different library storages using
:option:`platformio lib --global` or :option:`platformio lib --storage-dir` :option:`platformio lib --global` or :option:`platformio lib --storage-dir`
options. options. If you change current working directory in terminal to project folder,
then :ref:`platformio lib <cmd_lib>` command will manage automatically dependency
storage in :ref:`projectconf_pio_libdeps_dir`.
Project dependencies Project dependencies
-------------------- --------------------

View File

@ -32,7 +32,6 @@ Library Dependency Finder has controls that can be set up in :ref:`projectconf`:
* :ref:`projectconf_lib_deps` * :ref:`projectconf_lib_deps`
* :ref:`projectconf_lib_extra_dirs` * :ref:`projectconf_lib_extra_dirs`
* :ref:`projectconf_lib_force`
* :ref:`projectconf_lib_ignore` * :ref:`projectconf_lib_ignore`
* :ref:`projectconf_lib_compat_mode` * :ref:`projectconf_lib_compat_mode`
* :ref:`projectconf_lib_ldf_mode` * :ref:`projectconf_lib_ldf_mode`

View File

@ -40,9 +40,6 @@ Packages
* - ``tool-micronucleus`` * - ``tool-micronucleus``
- `Micronucleus <https://github.com/micronucleus/micronucleus>`_ - `Micronucleus <https://github.com/micronucleus/micronucleus>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-atmelavr`` * - ``toolchain-atmelavr``
- `avr-gcc <https://gcc.gnu.org/wiki/avr-gcc>`_, `GDB <http://www.gnu.org/software/gdb/>`_, `AVaRICE <http://avarice.sourceforge.net/>`_, `SimulAVR <http://www.nongnu.org/simulavr/>`_ - `avr-gcc <https://gcc.gnu.org/wiki/avr-gcc>`_, `GDB <http://www.gnu.org/software/gdb/>`_, `AVaRICE <http://avarice.sourceforge.net/>`_, `SimulAVR <http://www.nongnu.org/simulavr/>`_

View File

@ -46,9 +46,6 @@ Packages
* - ``tool-openocd`` * - ``tool-openocd``
- `OpenOCD <http://openocd.org>`_ - `OpenOCD <http://openocd.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi`` * - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -74,6 +74,9 @@ Packages
* - ``framework-arduinosam`` * - ``framework-arduinosam``
- `Arduino Wiring-based Framework (SAM Core, 1.6) <http://arduino.cc/en/Reference/HomePage>`_ - `Arduino Wiring-based Framework (SAM Core, 1.6) <http://arduino.cc/en/Reference/HomePage>`_
* - ``framework-arduinoststm32``
- `Arduino Wiring-based Framework (STM32 Core) <https://github.com/rogerclarkmelbourne/Arduino_STM32>`_
* - ``framework-arduinoteensy`` * - ``framework-arduinoteensy``
- `Arduino Wiring-based Framework <http://arduino.cc/en/Reference/HomePage>`_ - `Arduino Wiring-based Framework <http://arduino.cc/en/Reference/HomePage>`_

View File

@ -890,6 +890,26 @@ ESPino
- 4096 Kb - 4096 Kb
- 80 Kb - 80 Kb
Elektor Labs
~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``elektor_cocorico``
- `CoCo-ri-Co! <https://developer.mbed.org/platforms/CoCo-ri-Co/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
Embedded Artists Embedded Artists
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
@ -904,7 +924,7 @@ Embedded Artists
- RAM - RAM
* - ``lpc11u35`` * - ``lpc11u35``
- `Embedded Artists LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_ - `EA LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- LPC11U35 - LPC11U35
- 48 MHz - 48 MHz
- 64 Kb - 64 Kb
@ -1011,7 +1031,7 @@ Espressif
- ESP8266 - ESP8266
- 80 MHz - 80 MHz
- 4096 Kb - 4096 Kb
- 50 Kb - 80 Kb
* - ``phoenix_v1`` * - ``phoenix_v1``
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_ - `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
@ -1089,6 +1109,27 @@ Freescale
- 128 Kb - 128 Kb
- 16 Kb - 16 Kb
* - ``frdm_kl26z``
- `Freescale Kinetis FRDM-KL26Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl16-and-kl26-mcus-up-to-128-kb-flash:FRDM-KL26Z>`_
- MKL26Z128VLH4
- 48 MHz
- 128 Kb
- 16 Kb
* - ``frdm_kl27z``
- `Freescale Kinetis FRDM-KL27Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl17-and-kl27-mcus:FRDM-KL27Z>`_
- MKL27Z64VLH4
- 48 MHz
- 64 Kb
- 16 Kb
* - ``frdm_kl43z``
- `Freescale Kinetis FRDM-KL43Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl43-kl33-kl27-kl17-and-kl13-mcus:FRDM-KL43Z>`_
- MKL43Z256VLH4
- 48 MHz
- 256 Kb
- 32 Kb
* - ``frdm_kl46z`` * - ``frdm_kl46z``
- `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_ - `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_
- MKL46Z256VLL4 - MKL46Z256VLL4
@ -1123,6 +1164,26 @@ Fubarino
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
GHI Electronics
~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``oc_mbuino``
- `mBuino <https://developer.mbed.org/platforms/mBuino/>`_
- LPC11U24
- 50 MHz
- 32 Kb
- 10 Kb
Generic Generic
~~~~~~~ ~~~~~~~
@ -1143,6 +1204,48 @@ Generic
- 64 Kb - 64 Kb
- 20 Kb - 20 Kb
* - ``genericSTM32F103C8``
- `STM32F103C8 (20k RAM. 64k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103CB``
- `STM32F103CB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html>`_
- STM32F103CB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103R8``
- `STM32F103R8 (20k RAM. 64 Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103r8.html>`_
- STM32F103R8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103RB``
- `STM32F103RB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rb.html>`_
- STM32F103RB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103RC``
- `STM32F103RC (48k RAM. 256k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rc.html>`_
- STM32F103RC
- 72 MHz
- 256 Kb
- 48 Kb
* - ``genericSTM32F103RE``
- `STM32F103RE (64k RAM. 512k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103re.html>`_
- STM32F103RE
- 72 MHz
- 512 Kb
- 64 Kb
Generic ATTiny Generic ATTiny
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
@ -1238,7 +1341,7 @@ JKSoft
- Flash - Flash
- RAM - RAM
* - ``wallBotBLE`` * - ``wallbot_ble``
- `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_ - `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_
- NRF51822 - NRF51822
- 16 MHz - 16 MHz
@ -1470,6 +1573,46 @@ Microduino
- 64 Kb - 64 Kb
- 4 Kb - 4 Kb
Micromint
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc4330_m4``
- `Bambino-210E <https://developer.mbed.org/platforms/Micromint-Bambino-210E/>`_
- LPC4330
- 204 MHz
- 8192 Kb
- 264 Kb
MikroElektronika
~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``hexiwear``
- `Hexiwear <https://developer.mbed.org/platforms/Hexiwear/>`_
- MK64FN1M0VDC12
- 120 MHz
- 1024 Kb
- 256 Kb
MultiTech MultiTech
~~~~~~~~~ ~~~~~~~~~
@ -1483,6 +1626,13 @@ MultiTech
- Flash - Flash
- RAM - RAM
* - ``mts_mdot_f405rg``
- `MultiTech mDot <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
- 100 MHz
- 512 Kb
- 128 Kb
* - ``mts_mdot_f411re`` * - ``mts_mdot_f411re``
- `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_ - `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6 - STM32F411RET6
@ -1523,6 +1673,13 @@ NXP
- Flash - Flash
- RAM - RAM
* - ``lpc11c24``
- `NXP LPC11C24 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-m0-cores:LPC11C24FBD48>`_
- LPC11C24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u24`` * - ``lpc11u24``
- `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_ - `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_
- LPC11U24 - LPC11U24
@ -1530,6 +1687,34 @@ NXP
- 32 Kb - 32 Kb
- 8 Kb - 8 Kb
* - ``lpc11u24_301``
- `ARM mbed LPC11U24 (+CAN) <https://developer.mbed.org/handbook/mbed-NXP-LPC11U24>`_
- LPC11U24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u34_421``
- `NXP LPC11U34 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-lqfp48-package:LPC11U34FBD48?lang_cd=en>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 8 Kb
* - ``lpc11u37_501``
- `NXP LPC11U37 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/128kb-flash-10kb-sram-lqfp48-package:LPC11U37FBD48?lang_cd=en>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``lpc11u68``
- `LPCXpresso11U68 <https://developer.mbed.org/platforms/LPCXpresso11U68/>`_
- LPC11U68
- 50 MHz
- 256 Kb
- 36 Kb
* - ``lpc1549`` * - ``lpc1549``
- `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_ - `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_
- LPC1549 - LPC1549
@ -1544,6 +1729,41 @@ NXP
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
* - ``lpc2368``
- `NXP LPC2368 <https://developer.mbed.org/platforms/mbed-LPC2368/>`_
- LPC2368
- 72 MHz
- 512 Kb
- 58 Kb
* - ``lpc2460``
- `NXP LPC2460 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-arm7-arm9-mcus/lpc-arm7-mcus/lpc2100-200-300-400/flashless-16-bit-32-bit-microcontroller-ethernet-can-isp-iap-usb-2.0-device-host-otg-external-memory-interface:LPC2460FBD208>`_
- LPC2460
- 72 MHz
- 64 Kb
- 16 Kb
* - ``lpc812``
- `NXP LPC800-MAX <https://developer.mbed.org/platforms/NXP-LPC800-MAX/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
* - ``lpc824``
- `LPCXpresso824-MAX <https://developer.mbed.org/platforms/LPCXpresso824-MAX/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``micronfcboard``
- `MicroNFCBoard <https://developer.mbed.org/platforms/MicroNFCBoard/>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 10 Kb
NodeMCU NodeMCU
~~~~~~~ ~~~~~~~
@ -1618,6 +1838,13 @@ Olimex
- Flash - Flash
- RAM - RAM
* - ``maple``
- `Olimexino STM32 <https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/>`_
- STM32F103RB_MAPLE
- 72 MHz
- 128 Kb
- 16.6015625 Kb
* - ``modwifi`` * - ``modwifi``
- `Olimex MOD-WIFI-ESP8266(-DEV) <https://www.olimex.com/Products/IoT/MOD-WIFI-ESP8266-DEV/open-source-hardware>`_ - `Olimex MOD-WIFI-ESP8266(-DEV) <https://www.olimex.com/Products/IoT/MOD-WIFI-ESP8266-DEV/open-source-hardware>`_
- ESP8266 - ESP8266
@ -1997,6 +2224,13 @@ ST
- 1024 Kb - 1024 Kb
- 384 Kb - 384 Kb
* - ``disco_f746ng``
- `ST 32F746GDISCOVERY <http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html>`_
- STM32F746NGH6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``disco_l053c8`` * - ``disco_l053c8``
- `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_ - `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_
- STM32L053C8T6 - STM32L053C8T6
@ -2067,6 +2301,13 @@ ST
- 128 Kb - 128 Kb
- 20 Kb - 20 Kb
* - ``nucleo_f207zg``
- `ST Nucleo F207ZG <https://developer.mbed.org/platforms/ST-Nucleo-F207ZG/>`_
- STM32F207ZGT6
- 120 MHz
- 1024 Kb
- 128 Kb
* - ``nucleo_f302r8`` * - ``nucleo_f302r8``
- `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_ - `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_
- STM32F302R8T6 - STM32F302R8T6
@ -2116,6 +2357,13 @@ ST
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``nucleo_f429zi``
- `ST Nucleo F429ZI <https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/>`_
- STM32F429ZIT6
- 180 MHz
- 2048 Kb
- 256 Kb
* - ``nucleo_f446re`` * - ``nucleo_f446re``
- `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_ - `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_
- STM32F446RET6 - STM32F446RET6
@ -2123,6 +2371,34 @@ ST
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``nucleo_f446ze``
- `ST Nucleo F446ZE <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F446ZET6
- 180 MHz
- 512 Kb
- 128 Kb
* - ``nucleo_f746zg``
- `ST Nucleo F746ZG <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F746ZGT6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``nucleo_f767zi``
- `ST Nucleo F767ZI <https://developer.mbed.org/platforms/ST-Nucleo-F767ZI/>`_
- STM32F746ZGT6
- 216 MHz
- 2048 Kb
- 512 Kb
* - ``nucleo_l011k4``
- `ST Nucleo L011K4 <https://developer.mbed.org/platforms/ST-Nucleo-L011K4/>`_
- STM32L011K4T6
- 32 MHz
- 16 Kb
- 2 Kb
* - ``nucleo_l031k6`` * - ``nucleo_l031k6``
- `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_ - `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_
- STM32L031K6T6 - STM32L031K6T6
@ -2151,6 +2427,13 @@ ST
- 512 Kb - 512 Kb
- 80 Kb - 80 Kb
* - ``nucleo_l432kc``
- `ST Nucleo L432KC <https://developer.mbed.org/platforms/ST-Nucleo-L432KC/>`_
- STM32L432KCU6
- 80 MHz
- 256 Kb
- 64 Kb
* - ``nucleo_l476rg`` * - ``nucleo_l476rg``
- `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_ - `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_
- STM32L476RGT6 - STM32L476RGT6
@ -2260,27 +2543,55 @@ SeeedStudio
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``seeedArchMax`` * - ``seeedArchBLE``
- `SeeedStudio Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_ - `Seeed Arch BLE <https://developer.mbed.org/platforms/Seeed-Arch-BLE/>`_
- STM32F407VET6 - NRF51822
- 168 MHz - 16 MHz
- 512 Kb - 128 Kb
- 192 Kb - 16 Kb
* - ``seeedTinyBLE`` * - ``seeedArchGPRS``
- `SeeedStudio Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_ - `Seeed Arch GPRS V2 <https://www.seeedstudio.com/Arch-GPRS-V2-p-2026.html>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``seeedArchLink``
- `Seeed Arch Link <https://developer.mbed.org/platforms/Seeed-Arch-Link/>`_
- NRF51822 - NRF51822
- 16 MHz - 16 MHz
- 256 Kb - 256 Kb
- 16 Kb - 16 Kb
* - ``seeeduinoArchPro`` * - ``seeedArchMax``
- `SeeedStudio Seeeduino-Arch-Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_ - `Seeed Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6
- 168 MHz
- 512 Kb
- 192 Kb
* - ``seeedArchPro``
- `Seeed Arch Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
- LPC1768 - LPC1768
- 96 MHz - 96 MHz
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
* - ``seeedTinyBLE``
- `Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``xadow_m0``
- `Seeed Xadow M0 <https://developer.mbed.org/platforms/Seeed-Xadow-M0/>`_
- LPC11U35
- 48 MHz
- 64 Kb
- 10 Kb
Silicon Labs Silicon Labs
~~~~~~~~~~~~ ~~~~~~~~~~~~
@ -2336,6 +2647,26 @@ Silicon Labs
- 32 Kb - 32 Kb
- 4 Kb - 4 Kb
Smeshlink
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``xbed_lpc1768``
- `Smeshlink xbed LPC1768 <https://developer.mbed.org/platforms/xbed-LPC1768/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 32 Kb
Solder Splash Labs Solder Splash Labs
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
@ -2356,6 +2687,26 @@ Solder Splash Labs
- 32 Kb - 32 Kb
- 8 Kb - 8 Kb
SolderSplash Labs
~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc1347``
- `DipCortex M3 <https://developer.mbed.org/platforms/DipCortex-M3/>`_
- LPC1347
- 72 MHz
- 64 Kb
- 12 Kb
SparkFun SparkFun
~~~~~~~~ ~~~~~~~~
@ -2369,6 +2720,13 @@ SparkFun
- Flash - Flash
- RAM - RAM
* - ``sparkfunBlynk``
- `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
- ESP8266
- 80 MHz
- 4096 Kb
- 80 Kb
* - ``sparkfun_digitalsandbox`` * - ``sparkfun_digitalsandbox``
- `SparkFun Digital Sandbox <https://www.sparkfun.com/products/12651>`_ - `SparkFun Digital Sandbox <https://www.sparkfun.com/products/12651>`_
- ATMEGA328P - ATMEGA328P
@ -2514,6 +2872,20 @@ Switch Science
- 32 Kb - 32 Kb
- 4 Kb - 4 Kb
* - ``ssci824``
- `Switch Science mbed LPC824 <https://developer.mbed.org/platforms/Switch-Science-mbed-LPC824/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``ty51822r3``
- `Switch Science mbed TY51822r3 <https://developer.mbed.org/platforms/Switch-Science-mbed-TY51822r3/>`_
- NRF51822
- 32 MHz
- 256 Kb
- 32 Kb
TI TI
~~ ~~
@ -2652,6 +3024,20 @@ Teensy
- 256 Kb - 256 Kb
- 64 Kb - 64 Kb
* - ``teensy35``
- `Teensy 3.5 <https://www.pjrc.com>`_
- MK64FX512
- 120 MHz
- 512 Kb
- 192 Kb
* - ``teensy36``
- `Teensy 3.6 <https://www.pjrc.com>`_
- MK66FX1M0
- 180 MHz
- 1024 Kb
- 256 Kb
* - ``teensylc`` * - ``teensylc``
- `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_ - `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_
- MKL26Z64 - MKL26Z64
@ -2866,3 +3252,23 @@ ubIQio
- 16 MHz - 16 MHz
- 32 Kb - 32 Kb
- 2 Kb - 2 Kb
y5 design
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``nrf51822_y5_mbug``
- `y5 nRF51822 mbug <https://developer.mbed.org/platforms/Y5-NRF51822-MBUG/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb

View File

@ -43,9 +43,6 @@ Packages
* - ``tool-mkspiffs`` * - ``tool-mkspiffs``
- `Tool to build and unpack SPIFFS images <https://github.com/igrr/mkspiffs>`_ - `Tool to build and unpack SPIFFS images <https://github.com/igrr/mkspiffs>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-xtensa`` * - ``toolchain-xtensa``
- `xtensa-gcc <https://github.com/jcmvbkbc/gcc-xtensa>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `xtensa-gcc <https://github.com/jcmvbkbc/gcc-xtensa>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -222,7 +219,7 @@ Espressif
- ESP8266 - ESP8266
- 80 MHz - 80 MHz
- 4096 Kb - 4096 Kb
- 50 Kb - 80 Kb
* - ``phoenix_v1`` * - ``phoenix_v1``
- `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_ - `Phoenix 1.0 <http://www.esp8266.com/wiki/doku.php?id=esp8266-module-family>`_
@ -305,6 +302,13 @@ SparkFun
- Flash - Flash
- RAM - RAM
* - ``sparkfunBlynk``
- `SparkFun Blynk Board <https://www.sparkfun.com/products/13794>`_
- ESP8266
- 80 MHz
- 4096 Kb
- 80 Kb
* - ``thing`` * - ``thing``
- `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_ - `SparkFun ESP8266 Thing <https://www.sparkfun.com/products/13231>`_
- ESP8266 - ESP8266

View File

@ -220,25 +220,27 @@ Demo
Using Arduino Framework with Staging version Using Arduino Framework with Staging version
-------------------------------------------- --------------------------------------------
1. Clone/Copy `main repository <https://github.com/esp8266/Arduino>`_ to 1. Install :ref:`installation_develop` of PlatformIO
:ref:`projectconf_pio_home_dir` + ``packages/framework-arduinoespressif8266`` 2. Install Espressif 8266 (Stage) development platform
and create new file ``packages/framework-arduinoespressif8266/package.json``
with the next contents (you can specify own version if you want)
.. code-block:: json .. code::
{ platformio platform install https://github.com/platformio/platform-espressif8266.git#feature/stage
"description":"Arduino Wiring-based Framework (ESP8266 Core)",
"name":"framework-arduinoespressif8266",
"system":"all",
"url":"https://github.com/esp8266/Arduino",
"version":"1.20300.0"
}
2. Try to build project 3. Set :ref:`projectconf_env_platform` to ``espressif8266_stage`` in
3. If you see build errors, then try to build this project using the same :ref:`projectconf`. For example,
.. code-block:: ini
[env:nodemcuv2]
platform = espressif8266_stage
board = nodemcuv2
framework = arduino
4. Try to build project
5. If you see build errors, then try to build this project using the same
``stage`` on Arduino IDE ``stage`` on Arduino IDE
4. If it works with Arduino IDE but doesn't work with PlatformIO, then please 6. If it works with Arduino IDE but doesn't work with PlatformIO, then please
`open new issue <https://github.com/platformio/platformio/issues>`_ with `open new issue <https://github.com/platformio/platformio/issues>`_ with
attached information: attached information:
@ -251,6 +253,7 @@ Using Arduino Framework with Staging version
Articles Articles
-------- --------
* Sep 12, 2016 - **Pedro Minatel** - `OTA Como programar o ESP8266 pelo WiFi no platformIO (OTA programming for ESP8266 via Wi-Fi using PlatformIO, Portuguese) <http://pedrominatel.com.br/esp8266/ota-como-programar-o-esp8266-pelo-wifi-no-platformio/>`_
* Sep 2, 2016 - **Tinkerman** `Optimizing files for SPIFFS with Gulp <http://tinkerman.cat/optimizing-files-for-spiffs-with-gulp/>`_ * Sep 2, 2016 - **Tinkerman** `Optimizing files for SPIFFS with Gulp <http://tinkerman.cat/optimizing-files-for-spiffs-with-gulp/>`_
* Jul 15, 2016 - **Jaime** - `ESP8266 Mobile Rick Roll Captive Portal <https://hackaday.io/project/12709-esp8266-mobile-rick-roll-captive-portal>`_ * Jul 15, 2016 - **Jaime** - `ESP8266 Mobile Rick Roll Captive Portal <https://hackaday.io/project/12709-esp8266-mobile-rick-roll-captive-portal>`_
* Jun 13, 2016 - **Daniel Eichhorn** - `New Weather Station Demo on Github <http://blog.squix.org/2016/06/new-weather-station-demo-on-github.html>`_ * Jun 13, 2016 - **Daniel Eichhorn** - `New Weather Station Demo on Github <http://blog.squix.org/2016/06/new-weather-station-demo-on-github.html>`_

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-mbed`` * - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_ - `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi`` * - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -122,9 +119,50 @@ Freescale
- 128 Kb - 128 Kb
- 16 Kb - 16 Kb
* - ``frdm_kl26z``
- `Freescale Kinetis FRDM-KL26Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl16-and-kl26-mcus-up-to-128-kb-flash:FRDM-KL26Z>`_
- MKL26Z128VLH4
- 48 MHz
- 128 Kb
- 16 Kb
* - ``frdm_kl27z``
- `Freescale Kinetis FRDM-KL27Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl17-and-kl27-mcus:FRDM-KL27Z>`_
- MKL27Z64VLH4
- 48 MHz
- 64 Kb
- 16 Kb
* - ``frdm_kl43z``
- `Freescale Kinetis FRDM-KL43Z <http://www.nxp.com/products/software-and-tools/hardware-development-tools/freedom-development-boards/freedom-development-platform-for-kinetis-kl43-kl33-kl27-kl17-and-kl13-mcus:FRDM-KL43Z>`_
- MKL43Z256VLH4
- 48 MHz
- 256 Kb
- 32 Kb
* - ``frdm_kl46z`` * - ``frdm_kl46z``
- `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_ - `Freescale Kinetis FRDM-KL46Z <https://developer.mbed.org/platforms/FRDM-KL46Z/>`_
- MKL46Z256VLL4 - MKL46Z256VLL4
- 48 MHz - 48 MHz
- 256 Kb - 256 Kb
- 32 Kb - 32 Kb
MikroElektronika
~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``hexiwear``
- `Hexiwear <https://developer.mbed.org/platforms/Hexiwear/>`_
- MK64FN1M0VDC12
- 120 MHz
- 1024 Kb
- 256 Kb

View File

@ -34,9 +34,6 @@ Packages
* - ``tool-arduino101load`` * - ``tool-arduino101load``
- `Genuino101 uploader <https://github.com/01org/intel-arduino-tools>`_ - `Genuino101 uploader <https://github.com/01org/intel-arduino-tools>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-intelarc32`` * - ``toolchain-intelarc32``
- `GCC for Intel ARC <https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain>`_ - `GCC for Intel ARC <https://github.com/foss-for-synopsys-dwc-arc-processors/toolchain>`_

View File

@ -28,9 +28,6 @@ Packages
* - Name * - Name
- Contents - Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-icestorm`` * - ``toolchain-icestorm``
- `GCC for FPGA IceStorm <http://www.clifford.at/icestorm/>`_ - `GCC for FPGA IceStorm <http://www.clifford.at/icestorm/>`_

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-wiringpi`` * - ``framework-wiringpi``
- `GPIO Interface library for the Raspberry Pi <http://wiringpi.com>`_ - `GPIO Interface library for the Raspberry Pi <http://wiringpi.com>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmlinuxgnueabi`` * - ``toolchain-gccarmlinuxgnueabi``
- `GCC for Linux ARM GNU EABI <https://gcc.gnu.org>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `GCC for Linux ARM GNU EABI <https://gcc.gnu.org>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -28,8 +28,5 @@ Packages
* - Name * - Name
- Contents - Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gcclinux32`` * - ``toolchain-gcclinux32``
- `GCC for Linux i686 <https://gcc.gnu.org>`_ - `GCC for Linux i686 <https://gcc.gnu.org>`_

View File

@ -28,8 +28,5 @@ Packages
* - Name * - Name
- Contents - Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gcclinux64`` * - ``toolchain-gcclinux64``
- `GCC for Linux x86_64 <https://gcc.gnu.org>`_ - `GCC for Linux x86_64 <https://gcc.gnu.org>`_

View File

@ -34,9 +34,6 @@ Packages
* - ``tool-pic32prog`` * - ``tool-pic32prog``
- `pic32prog <https://github.com/sergev/pic32prog>`_ - `pic32prog <https://github.com/sergev/pic32prog>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-microchippic32`` * - ``toolchain-microchippic32``
- `GCC for Microchip PIC32 <https://github.com/chipKIT32/chipKIT-cxx>`_ - `GCC for Microchip PIC32 <https://github.com/chipKIT32/chipKIT-cxx>`_

View File

@ -18,15 +18,3 @@ Native development platform is intended to be used for desktop OS. This platform
For more detailed information please visit `vendor site <http://platformio.org/platforms/native>`_. For more detailed information please visit `vendor site <http://platformio.org/platforms/native>`_.
.. contents:: .. contents::
Packages
--------
.. list-table::
:header-rows: 1
* - Name
- Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_

View File

@ -37,9 +37,6 @@ Packages
* - ``tool-rfdloader`` * - ``tool-rfdloader``
- `rfdloader <https://github.com/RFduino/RFduino>`_ - `rfdloader <https://github.com/RFduino/RFduino>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``tool-sreccat`` * - ``tool-sreccat``
- `Merging tool <https://github.com/marcows/SRecord>`_ - `Merging tool <https://github.com/marcows/SRecord>`_
@ -132,7 +129,7 @@ JKSoft
- Flash - Flash
- RAM - RAM
* - ``wallBotBLE`` * - ``wallbot_ble``
- `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_ - `JKSoft Wallbot BLE <https://developer.mbed.org/platforms/JKSoft-Wallbot-BLE/>`_
- NRF51822 - NRF51822
- 16 MHz - 16 MHz
@ -233,8 +230,22 @@ SeeedStudio
- Flash - Flash
- RAM - RAM
* - ``seeedArchBLE``
- `Seeed Arch BLE <https://developer.mbed.org/platforms/Seeed-Arch-BLE/>`_
- NRF51822
- 16 MHz
- 128 Kb
- 16 Kb
* - ``seeedArchLink``
- `Seeed Arch Link <https://developer.mbed.org/platforms/Seeed-Arch-Link/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
* - ``seeedTinyBLE`` * - ``seeedTinyBLE``
- `SeeedStudio Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_ - `Seeed Tiny BLE <http://developer.mbed.org/platforms/Seeed-Tiny-BLE/>`_
- NRF51822 - NRF51822
- 16 MHz - 16 MHz
- 256 Kb - 256 Kb
@ -260,4 +271,31 @@ Switch Science
- 256 Kb - 256 Kb
- 16 Kb - 16 Kb
* - ``ty51822r3``
- `Switch Science mbed TY51822r3 <https://developer.mbed.org/platforms/Switch-Science-mbed-TY51822r3/>`_
- NRF51822
- 32 MHz
- 256 Kb
- 32 Kb
y5 design
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``nrf51822_y5_mbug``
- `y5 nRF51822 mbug <https://developer.mbed.org/platforms/Y5-NRF51822-MBUG/>`_
- NRF51822
- 16 MHz
- 256 Kb
- 16 Kb
.. include:: nordicnrf51_extra.rst .. include:: nordicnrf51_extra.rst

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-mbed`` * - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_ - `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi`` * - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_
@ -87,6 +84,26 @@ CQ Publishing
- 64 Kb - 64 Kb
- 10 Kb - 10 Kb
Elektor Labs
~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``elektor_cocorico``
- `CoCo-ri-Co! <https://developer.mbed.org/platforms/CoCo-ri-Co/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
Embedded Artists Embedded Artists
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
@ -101,7 +118,7 @@ Embedded Artists
- RAM - RAM
* - ``lpc11u35`` * - ``lpc11u35``
- `Embedded Artists LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_ - `EA LPC11U35 QuickStart Board <https://developer.mbed.org/platforms/EA-LPC11U35/>`_
- LPC11U35 - LPC11U35
- 48 MHz - 48 MHz
- 64 Kb - 64 Kb
@ -121,6 +138,46 @@ Embedded Artists
- 512 Kb - 512 Kb
- 96 Kb - 96 Kb
GHI Electronics
~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``oc_mbuino``
- `mBuino <https://developer.mbed.org/platforms/mBuino/>`_
- LPC11U24
- 50 MHz
- 32 Kb
- 10 Kb
Micromint
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc4330_m4``
- `Bambino-210E <https://developer.mbed.org/platforms/Micromint-Bambino-210E/>`_
- LPC4330
- 204 MHz
- 8192 Kb
- 264 Kb
NGX Technologies NGX Technologies
~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~
@ -154,6 +211,13 @@ NXP
- Flash - Flash
- RAM - RAM
* - ``lpc11c24``
- `NXP LPC11C24 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/scalable-entry-level-32-bit-microcontroller-mcu-based-on-arm-cortex-m0-plus-m0-cores:LPC11C24FBD48>`_
- LPC11C24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u24`` * - ``lpc11u24``
- `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_ - `NXP mbed LPC11U24 <https://developer.mbed.org/platforms/mbed-LPC11U24/>`_
- LPC11U24 - LPC11U24
@ -161,6 +225,34 @@ NXP
- 32 Kb - 32 Kb
- 8 Kb - 8 Kb
* - ``lpc11u24_301``
- `ARM mbed LPC11U24 (+CAN) <https://developer.mbed.org/handbook/mbed-NXP-LPC11U24>`_
- LPC11U24
- 48 MHz
- 32 Kb
- 8 Kb
* - ``lpc11u34_421``
- `NXP LPC11U34 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/40kb-flash-8kb-sram-lqfp48-package:LPC11U34FBD48?lang_cd=en>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 8 Kb
* - ``lpc11u37_501``
- `NXP LPC11U37 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-cortex-m-mcus/lpc-cortex-m0-plus-m0/lpc1100-cortex-m0-plus-m0/128kb-flash-10kb-sram-lqfp48-package:LPC11U37FBD48?lang_cd=en>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``lpc11u68``
- `LPCXpresso11U68 <https://developer.mbed.org/platforms/LPCXpresso11U68/>`_
- LPC11U68
- 50 MHz
- 256 Kb
- 36 Kb
* - ``lpc1549`` * - ``lpc1549``
- `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_ - `NXP LPCXpresso1549 <https://developer.mbed.org/platforms/LPCXpresso1549/>`_
- LPC1549 - LPC1549
@ -175,6 +267,41 @@ NXP
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
* - ``lpc2368``
- `NXP LPC2368 <https://developer.mbed.org/platforms/mbed-LPC2368/>`_
- LPC2368
- 72 MHz
- 512 Kb
- 58 Kb
* - ``lpc2460``
- `NXP LPC2460 <http://www.nxp.com/products/microcontrollers-and-processors/arm-processors/lpc-arm7-arm9-mcus/lpc-arm7-mcus/lpc2100-200-300-400/flashless-16-bit-32-bit-microcontroller-ethernet-can-isp-iap-usb-2.0-device-host-otg-external-memory-interface:LPC2460FBD208>`_
- LPC2460
- 72 MHz
- 64 Kb
- 16 Kb
* - ``lpc812``
- `NXP LPC800-MAX <https://developer.mbed.org/platforms/NXP-LPC800-MAX/>`_
- LPC812
- 30 MHz
- 16 Kb
- 4 Kb
* - ``lpc824``
- `LPCXpresso824-MAX <https://developer.mbed.org/platforms/LPCXpresso824-MAX/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
* - ``micronfcboard``
- `MicroNFCBoard <https://developer.mbed.org/platforms/MicroNFCBoard/>`_
- LPC11U34
- 48 MHz
- 64 Kb
- 10 Kb
Outrageous Circuits Outrageous Circuits
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
@ -208,13 +335,47 @@ SeeedStudio
- Flash - Flash
- RAM - RAM
* - ``seeeduinoArchPro`` * - ``seeedArchGPRS``
- `SeeedStudio Seeeduino-Arch-Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_ - `Seeed Arch GPRS V2 <https://www.seeedstudio.com/Arch-GPRS-V2-p-2026.html>`_
- LPC11U37
- 48 MHz
- 128 Kb
- 10 Kb
* - ``seeedArchPro``
- `Seeed Arch Pro <https://developer.mbed.org/platforms/Seeeduino-Arch-Pro/>`_
- LPC1768 - LPC1768
- 96 MHz - 96 MHz
- 512 Kb - 512 Kb
- 64 Kb - 64 Kb
* - ``xadow_m0``
- `Seeed Xadow M0 <https://developer.mbed.org/platforms/Seeed-Xadow-M0/>`_
- LPC11U35
- 48 MHz
- 64 Kb
- 10 Kb
Smeshlink
~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``xbed_lpc1768``
- `Smeshlink xbed LPC1768 <https://developer.mbed.org/platforms/xbed-LPC1768/>`_
- LPC1768
- 96 MHz
- 512 Kb
- 32 Kb
Solder Splash Labs Solder Splash Labs
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
@ -235,6 +396,26 @@ Solder Splash Labs
- 32 Kb - 32 Kb
- 8 Kb - 8 Kb
SolderSplash Labs
~~~~~~~~~~~~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``lpc1347``
- `DipCortex M3 <https://developer.mbed.org/platforms/DipCortex-M3/>`_
- LPC1347
- 72 MHz
- 64 Kb
- 12 Kb
Switch Science Switch Science
~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~
@ -255,6 +436,13 @@ Switch Science
- 32 Kb - 32 Kb
- 4 Kb - 4 Kb
* - ``ssci824``
- `Switch Science mbed LPC824 <https://developer.mbed.org/platforms/Switch-Science-mbed-LPC824/>`_
- LPC824
- 30 MHz
- 32 Kb
- 8 Kb
u-blox u-blox
~~~~~~ ~~~~~~

View File

@ -31,9 +31,6 @@ Packages
* - ``framework-mbed`` * - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_ - `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi`` * - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -28,6 +28,9 @@ Packages
* - Name * - Name
- Contents - Contents
* - ``framework-arduinoststm32``
- `Arduino Wiring-based Framework (STM32 Core) <https://github.com/rogerclarkmelbourne/Arduino_STM32>`_
* - ``framework-cmsis`` * - ``framework-cmsis``
- `Vendor-independent hardware abstraction layer for the Cortex-M processor series <http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php>`_ - `Vendor-independent hardware abstraction layer for the Cortex-M processor series <http://www.arm.com/products/processors/cortex-m/cortex-microcontroller-software-interface-standard.php>`_
@ -40,9 +43,6 @@ Packages
* - ``framework-spl`` * - ``framework-spl``
- `Standard Peripheral Library for STM32 MCUs <http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890>`_ - `Standard Peripheral Library for STM32 MCUs <http://www.st.com/web/catalog/tools/FM147/CL1794/SC961/SS1743/PF257890>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``tool-stlink`` * - ``tool-stlink``
- `ST-Link <https://github.com/texane/stlink>`_ - `ST-Link <https://github.com/texane/stlink>`_
@ -67,6 +67,9 @@ Frameworks
* - Name * - Name
- Description - Description
* - :ref:`framework_arduino`
- Arduino Wiring-based Framework allows writing cross-platform software to control devices attached to a wide range of Arduino boards to create all kinds of creative coding, interactive objects, spaces or physical experiences.
* - :ref:`framework_cmsis` * - :ref:`framework_cmsis`
- The ARM Cortex Microcontroller Software Interface Standard (CMSIS) is a vendor-independent hardware abstraction layer for the Cortex-M processor series and specifies debugger interfaces. The CMSIS enables consistent and simple software interfaces to the processor for interface peripherals, real-time operating systems, and middleware. It simplifies software re-use, reducing the learning curve for new microcontroller developers and cutting the time-to-market for devices. - The ARM Cortex Microcontroller Software Interface Standard (CMSIS) is a vendor-independent hardware abstraction layer for the Cortex-M processor series and specifies debugger interfaces. The CMSIS enables consistent and simple software interfaces to the processor for interface peripherals, real-time operating systems, and middleware. It simplifies software re-use, reducing the learning curve for new microcontroller developers and cutting the time-to-market for devices.
@ -162,6 +165,48 @@ Generic
- 64 Kb - 64 Kb
- 20 Kb - 20 Kb
* - ``genericSTM32F103C8``
- `STM32F103C8 (20k RAM. 64k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103c8.html>`_
- STM32F103C8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103CB``
- `STM32F103CB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103cb.html>`_
- STM32F103CB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103R8``
- `STM32F103R8 (20k RAM. 64 Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103r8.html>`_
- STM32F103R8
- 72 MHz
- 64 Kb
- 20 Kb
* - ``genericSTM32F103RB``
- `STM32F103RB (20k RAM. 128k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rb.html>`_
- STM32F103RB
- 72 MHz
- 128 Kb
- 20 Kb
* - ``genericSTM32F103RC``
- `STM32F103RC (48k RAM. 256k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103rc.html>`_
- STM32F103RC
- 72 MHz
- 256 Kb
- 48 Kb
* - ``genericSTM32F103RE``
- `STM32F103RE (64k RAM. 512k Flash) <http://www.st.com/content/st_com/en/products/microcontrollers/stm32-32-bit-arm-cortex-mcus/stm32f1-series/stm32f103/stm32f103re.html>`_
- STM32F103RE
- 72 MHz
- 512 Kb
- 64 Kb
MultiTech MultiTech
~~~~~~~~~ ~~~~~~~~~
@ -175,6 +220,13 @@ MultiTech
- Flash - Flash
- RAM - RAM
* - ``mts_mdot_f405rg``
- `MultiTech mDot <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6
- 100 MHz
- 512 Kb
- 128 Kb
* - ``mts_mdot_f411re`` * - ``mts_mdot_f411re``
- `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_ - `MultiTech mDot F411 <https://developer.mbed.org/platforms/MTS-mDot-F411/>`_
- STM32F411RET6 - STM32F411RET6
@ -182,6 +234,26 @@ MultiTech
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
Olimex
~~~~~~
.. list-table::
:header-rows: 1
* - Type ``board``
- Name
- Microcontroller
- Frequency
- Flash
- RAM
* - ``maple``
- `Olimexino STM32 <https://www.olimex.com/Products/Duino/STM32/OLIMEXINO-STM32/>`_
- STM32F103RB_MAPLE
- 72 MHz
- 128 Kb
- 16.6015625 Kb
ST ST
~~ ~~
@ -251,6 +323,13 @@ ST
- 1024 Kb - 1024 Kb
- 384 Kb - 384 Kb
* - ``disco_f746ng``
- `ST 32F746GDISCOVERY <http://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-eval-tools/stm32-mcu-eval-tools/stm32-mcu-discovery-kits/32f746gdiscovery.html>`_
- STM32F746NGH6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``disco_l053c8`` * - ``disco_l053c8``
- `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_ - `ST 32L0538DISCOVERY <http://www.st.com/web/en/catalog/tools/PF260319>`_
- STM32L053C8T6 - STM32L053C8T6
@ -321,6 +400,13 @@ ST
- 128 Kb - 128 Kb
- 20 Kb - 20 Kb
* - ``nucleo_f207zg``
- `ST Nucleo F207ZG <https://developer.mbed.org/platforms/ST-Nucleo-F207ZG/>`_
- STM32F207ZGT6
- 120 MHz
- 1024 Kb
- 128 Kb
* - ``nucleo_f302r8`` * - ``nucleo_f302r8``
- `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_ - `ST Nucleo F302R8 <https://developer.mbed.org/platforms/ST-Nucleo-F302R8/>`_
- STM32F302R8T6 - STM32F302R8T6
@ -370,6 +456,13 @@ ST
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``nucleo_f429zi``
- `ST Nucleo F429ZI <https://developer.mbed.org/platforms/ST-Nucleo-F429ZI/>`_
- STM32F429ZIT6
- 180 MHz
- 2048 Kb
- 256 Kb
* - ``nucleo_f446re`` * - ``nucleo_f446re``
- `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_ - `ST Nucleo F446RE <https://developer.mbed.org/platforms/ST-Nucleo-F446RE/>`_
- STM32F446RET6 - STM32F446RET6
@ -377,6 +470,34 @@ ST
- 512 Kb - 512 Kb
- 128 Kb - 128 Kb
* - ``nucleo_f446ze``
- `ST Nucleo F446ZE <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F446ZET6
- 180 MHz
- 512 Kb
- 128 Kb
* - ``nucleo_f746zg``
- `ST Nucleo F746ZG <https://developer.mbed.org/platforms/ST-Nucleo-F446ZE/>`_
- STM32F746ZGT6
- 216 MHz
- 1024 Kb
- 320 Kb
* - ``nucleo_f767zi``
- `ST Nucleo F767ZI <https://developer.mbed.org/platforms/ST-Nucleo-F767ZI/>`_
- STM32F746ZGT6
- 216 MHz
- 2048 Kb
- 512 Kb
* - ``nucleo_l011k4``
- `ST Nucleo L011K4 <https://developer.mbed.org/platforms/ST-Nucleo-L011K4/>`_
- STM32L011K4T6
- 32 MHz
- 16 Kb
- 2 Kb
* - ``nucleo_l031k6`` * - ``nucleo_l031k6``
- `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_ - `ST Nucleo L031K6 <https://developer.mbed.org/platforms/ST-Nucleo-L031K6/>`_
- STM32L031K6T6 - STM32L031K6T6
@ -405,6 +526,13 @@ ST
- 512 Kb - 512 Kb
- 80 Kb - 80 Kb
* - ``nucleo_l432kc``
- `ST Nucleo L432KC <https://developer.mbed.org/platforms/ST-Nucleo-L432KC/>`_
- STM32L432KCU6
- 80 MHz
- 256 Kb
- 64 Kb
* - ``nucleo_l476rg`` * - ``nucleo_l476rg``
- `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_ - `ST Nucleo L476RG <https://developer.mbed.org/platforms/ST-Nucleo-L476RG/>`_
- STM32L476RGT6 - STM32L476RGT6
@ -426,7 +554,7 @@ SeeedStudio
- RAM - RAM
* - ``seeedArchMax`` * - ``seeedArchMax``
- `SeeedStudio Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_ - `Seeed Arch Max <https://developer.mbed.org/platforms/Seeed-Arch-Max/>`_
- STM32F407VET6 - STM32F407VET6
- 168 MHz - 168 MHz
- 512 Kb - 512 Kb

View File

@ -34,9 +34,6 @@ Packages
* - ``framework-mbed`` * - ``framework-mbed``
- `mbed Framework <http://mbed.org>`_ - `mbed Framework <http://mbed.org>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``tool-teensy`` * - ``tool-teensy``
- `Teensy Loader <https://www.pjrc.com/teensy/loader.html>`_ - `Teensy Loader <https://www.pjrc.com/teensy/loader.html>`_
@ -123,6 +120,20 @@ Teensy
- 256 Kb - 256 Kb
- 64 Kb - 64 Kb
* - ``teensy35``
- `Teensy 3.5 <https://www.pjrc.com>`_
- MK64FX512
- 120 MHz
- 512 Kb
- 192 Kb
* - ``teensy36``
- `Teensy 3.6 <https://www.pjrc.com>`_
- MK66FX1M0
- 180 MHz
- 1024 Kb
- 256 Kb
* - ``teensylc`` * - ``teensylc``
- `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_ - `Teensy LC <http://www.pjrc.com/teensy/teensyLC.html>`_
- MKL26Z64 - MKL26Z64

View File

@ -37,9 +37,6 @@ Packages
* - ``tool-mspdebug`` * - ``tool-mspdebug``
- `MSPDebug <http://mspdebug.sourceforge.net/>`_ - `MSPDebug <http://mspdebug.sourceforge.net/>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-timsp430`` * - ``toolchain-timsp430``
- `msp-gcc <http://sourceforge.net/projects/mspgcc/>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `msp-gcc <http://sourceforge.net/projects/mspgcc/>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -37,9 +37,6 @@ Packages
* - ``tool-lm4flash`` * - ``tool-lm4flash``
- `Flash Programmer <http://www.ti.com/tool/lmflashprogrammer>`_ - `Flash Programmer <http://www.ti.com/tool/lmflashprogrammer>`_
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccarmnoneeabi`` * - ``toolchain-gccarmnoneeabi``
- `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_ - `gcc-arm-embedded <https://launchpad.net/gcc-arm-embedded>`_, `GDB <http://www.gnu.org/software/gdb/>`_

View File

@ -28,8 +28,5 @@ Packages
* - Name * - Name
- Contents - Contents
* - ``tool-scons``
- `SCons software construction tool <http://www.scons.org>`_
* - ``toolchain-gccmingw32`` * - ``toolchain-gccmingw32``
- `MinGW <http://www.mingw.org>`_ - `MinGW <http://www.mingw.org>`_

View File

@ -21,13 +21,73 @@ The Project configuration file is named ``platformio.ini``. This is a
key / value pairs within the sections. Lines beginning with ``;`` key / value pairs within the sections. Lines beginning with ``;``
are ignored and may be used to provide comments. are ignored and may be used to provide comments.
The sections and their allowable values are described below. There are 2 system reserved sections:
* Base PlatformIO settings: :ref:`projectconf_section_platformio`
* Build Environment settings: :ref:`projectconf_section_env`
The other sections can be used by users, for example, for
:ref:`projectconf_dynamic_vars`. The sections and their allowable values are
described below.
.. contents:: .. contents::
:depth: 2
.. _projectconf_dynamic_vars:
Dynamic variables
-----------------
.. versionadded:: 3.1
Dynamic variables/templates are useful when you have common configuration data
between build environments. For examples, common :ref:`projectconf_build_flags`
or project dependencies :ref:`projectconf_lib_deps`.
Each variable should have a next format: ``${<section>.<option>}``, where
``<section>`` is a value from ``[<section>]`` group, and ``<option>`` is a
first item from pair ``<option> = value``.
* Variable can be applied only for the option's value
* Multiple variables are allowed
* The ``platformio`` section is reserved and could not be used as custom
section. Some good section names might be ``common`` or ``global``.
Example:
.. code-block:: ini
[common]
build_flags = -D VERSION=1.2.3 -D DEBUG=1
lib_deps_builtin = SPI, Wire
lib_deps_external = ArduinoJson@>5.6.0
[env:uno]
platform = atmelavr
framework = arduino
board = uno
build_flags = ${common.build_flags}
lib_deps = ${common.lib_deps_builtin}, ${common.lib_deps_external}
[env:nodemcuv2]
platform = espressif8266
framework = arduino
board = nodemcuv2
build_flags = ${common.build_flags} -DSSID_NAME=HELLO -DSSID_PASWORD=WORLD
lib_deps =
${common.lib_deps_builtin}
${common.lib_deps_external}
PubSubClient@2.6
OneWire
.. _projectconf_section_platformio:
Section ``[platformio]`` Section ``[platformio]``
------------------------ ------------------------
.. contents::
:local:
A ``platformio`` section is used for overriding default configuration options A ``platformio`` section is used for overriding default configuration options
.. note:: .. note::
@ -45,7 +105,8 @@ Options
^^^^^^^^^^^^ ^^^^^^^^^^^^
Is used to store platform toolchains, frameworks, global libraries for Is used to store platform toolchains, frameworks, global libraries for
:ref: `ldf`, service data and etc. :ref: `ldf`, service data and etc. The size of this folder will depend on
number of installed development platforms.
A default value is User's home directory: A default value is User's home directory:
@ -55,6 +116,13 @@ A default value is User's home directory:
This option can be overridden by global environment variable This option can be overridden by global environment variable
:envvar:`PLATFORMIO_HOME_DIR`. :envvar:`PLATFORMIO_HOME_DIR`.
Example:
.. code-block:: ini
[platformio]
home_dir = /path/to/custom/pio/storage
.. _projectconf_pio_lib_dir: .. _projectconf_pio_lib_dir:
``lib_dir`` ``lib_dir``
@ -223,11 +291,14 @@ Multiple environments are allowed if they are separated with ", "
board = lpmsp430g2553 board = lpmsp430g2553
build_flags = -D LED_BUILTIN=RED_LED build_flags = -D LED_BUILTIN=RED_LED
---------- .. _projectconf_section_env:
Section ``[env:NAME]`` Section ``[env:NAME]``
---------------------- ----------------------
.. contents::
:local:
A section with ``env:`` prefix is used to define virtual environment with A section with ``env:`` prefix is used to define virtual environment with
specific options that will be processed with :ref:`cmd_run` command. You can specific options that will be processed with :ref:`cmd_run` command. You can
define unlimited numbers of environments. define unlimited numbers of environments.
@ -652,6 +723,16 @@ To print all available serial ports use :ref:`cmd_device` command.
This option can be set by global environment variable This option can be set by global environment variable
:envvar:`PLATFORMIO_UPLOAD_PORT`. :envvar:`PLATFORMIO_UPLOAD_PORT`.
Example:
.. code-block:: ini
[env:uno]
platform = atmelavr
framework = arduino
board = uno
upload_port = /dev/ttyUSB0
``upload_protocol`` ``upload_protocol``
^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
@ -703,13 +784,18 @@ Specify project dependencies that should be installed automatically to
:ref:`projectconf_pio_libdeps_dir` before environment processing. :ref:`projectconf_pio_libdeps_dir` before environment processing.
Multiple dependencies are allowed (multi-lines or separated with comma+space ", "). Multiple dependencies are allowed (multi-lines or separated with comma+space ", ").
If you have multiple build environments that depend on the same libraries,
you can use :ref:`projectconf_dynamic_vars` to use common configuration.
**Valid forms** **Valid forms**
.. code-block:: ini .. code-block:: ini
; one line definition (comma + space)
[env:myenv] [env:myenv]
lib_deps = LIBRARY_1, LIBRARY_2, LIBRARY_N lib_deps = LIBRARY_1, LIBRARY_2, LIBRARY_N
; multi-line definition
[env:myenv2] [env:myenv2]
lib_deps = lib_deps =
LIBRARY_1 LIBRARY_1
@ -732,30 +818,6 @@ Example:
https://github.com/gioblu/PJON.git@v2.0 https://github.com/gioblu/PJON.git@v2.0
https://github.com/me-no-dev/ESPAsyncTCP.git https://github.com/me-no-dev/ESPAsyncTCP.git
.. _projectconf_lib_force:
``lib_force``
^^^^^^^^^^^^^
.. seealso::
Please make sure to read :ref:`ldf` guide first.
Force Library Dependency Finder to depend on the specified library if it even
is not included in the project source code. Also, this library will be
processed in the first order.
The correct value for this option is library name (not folder name). In the
most cases, library name is pre-defined in manifest file
(:ref:`library_config`, ``library.properties``, ``module.json``). The multiple
library names are allowed, split them with comma+space ", ".
Example:
.. code-block:: ini
[env:myenv]
lib_force = OneWire, SPI
.. _projectconf_lib_ignore: .. _projectconf_lib_ignore:
``lib_ignore`` ``lib_ignore``

View File

@ -133,7 +133,7 @@ next structure:
(``*.h, *.c, *.cpp, *.S, *.ino, etc.``) (``*.h, *.c, *.cpp, *.S, *.ino, etc.``)
* ``lib`` directory can be used for the project specific (private) libraries. * ``lib`` directory can be used for the project specific (private) libraries.
More details are located in ``lib/readme.txt`` file. More details are located in ``lib/readme.txt`` file.
* Miscellaneous files for CVS and :ref:`ci` support. * Miscellaneous files for VCS and :ref:`ci` support.
.. note:: .. note::

View File

@ -118,9 +118,9 @@ Buid project using pre-configured :ref:`projectconf`.
.. option:: .. option::
-O, --project-option -O, --project-option
Pass additional options from :ref:`projectconf` to Pass additional options from :ref:`projectconf` to :ref:`cmd_init` command.
:option:`platformio init --project-option` command. For example, Use multiple ``--project-option`` options to pass multiple options to
automatically install dependent libraries :ref:`cmd_init` command. For example, automatically install dependent libraries
``platformio ci --project-option="lib_deps=ArduinoJSON"`` or ignore specific ``platformio ci --project-option="lib_deps=ArduinoJSON"`` or ignore specific
library ``platformio ci --project-option="lib_ignore=SomeLib"``. library ``platformio ci --project-option="lib_ignore=SomeLib"``.

View File

@ -37,7 +37,7 @@ This command will create:
(``*.h, *.c, *.cpp, *.S, *.ino, etc.``) (``*.h, *.c, *.cpp, *.S, *.ino, etc.``)
* ``lib`` directory can be used for the project specific (private) libraries. * ``lib`` directory can be used for the project specific (private) libraries.
More details are located in ``lib/readme.txt`` file. More details are located in ``lib/readme.txt`` file.
* Miscellaneous files for CVS and :ref:`ci` support. * Miscellaneous files for VCS and :ref:`ci` support.
Options Options
------- -------
@ -89,11 +89,11 @@ be ``[env:teensy_31]``.
Examples Examples
-------- --------
1. Create new project in the current working directory 1. Initialize new project in a current working directory
.. code-block:: bash .. code::
$ platformio init > platformio init
The current working directory *** will be used for the new project. The current working directory *** will be used for the new project.
You can specify another project directory via You can specify another project directory via
@ -110,38 +110,35 @@ Examples
`platformio run --target clean` - clean project (remove compiled files) `platformio run --target clean` - clean project (remove compiled files)
2. Create new project in the specified directory 2. Initialize new project in a specified directory
.. code-block:: bash .. code::
$ platformio init -d %PATH_TO_DIR% > platformio init -d %PATH_TO_DIR%
The next files/directories will be created in *** The next files/directories will be created in ***
platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-| platformio.ini - Project Configuration File. |-> PLEASE EDIT ME <-|
src - Put your source files here ...
lib - Put here project specific (private) libraries
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)
3. Initialize project for Arduino Uno 3. Initialize project for Arduino Uno
.. code-block:: bash .. code::
$ platformio init --board uno > platformio init --board uno
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.
...
4. Initialize project for Teensy 3.1 board with custom :ref:`framework_mbed`
.. code::
> platformio init --board teensy31 --project-option "framework=mbed"
The current working directory *** will be used for the new project. The current working directory *** will be used for the new project.
You can specify another project directory via You can specify another project directory via
`platformio init -d %PATH_TO_THE_PROJECT_DIR%` command. `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
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)

View File

@ -87,15 +87,15 @@ Check for the new PlatformIO interval.
Check for the platform updates interval. Check for the platform updates interval.
.. _setting_disable_ssl: .. _setting_enable_ssl:
``disable_ssl`` ``enable_ssl``
^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^
:Default: No :Default: No
:Values: Yes/No :Values: Yes/No
Disable SSL for PlatformIO API (NOT RECOMMENDED, INSECURE) Enable SSL for PlatformIO Services
.. _setting_force_verbose: .. _setting_force_verbose:

View File

@ -87,7 +87,7 @@ archive should contain ``.library.json`` manifest (see :ref:`library_config`).
Storage Options Storage Options
--------------- ---------------
See base options for :ref:`userguide_lib`. See base options for :ref:`cmd_lib`.
Options Options
------- -------

View File

@ -43,7 +43,7 @@ List installed libraries
Storage Options Storage Options
--------------- ---------------
See base options for :ref:`userguide_lib`. See base options for :ref:`cmd_lib`.
Options Options
~~~~~~~ ~~~~~~~

View File

@ -64,7 +64,7 @@ The ``version`` supports `Semantic Versioning <http://semver.org>`_ (
Storage Options Storage Options
--------------- ---------------
See base options for :ref:`userguide_lib`. See base options for :ref:`cmd_lib`.
Examples Examples
-------- --------

View File

@ -63,7 +63,7 @@ The ``version`` supports `Semantic Versioning <http://semver.org>`_ (
Storage Options Storage Options
--------------- ---------------
See base options for :ref:`userguide_lib`. See base options for :ref:`cmd_lib`.
Examples Examples
-------- --------

View File

@ -67,7 +67,7 @@ The ``version`` supports `Semantic Versioning <http://semver.org>`_ (
Storage Options Storage Options
--------------- ---------------
See base options for :ref:`userguide_lib`. See base options for :ref:`cmd_lib`.
Options Options
------- -------

View File

@ -9,7 +9,7 @@
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
.. _userguide_lib: .. _cmd_lib:
Library Manager Library Manager
=============== ===============
@ -46,7 +46,7 @@ dependencies by default.
.. versionadded:: 3.0 .. versionadded:: 3.0
Manage custom library storage. It can be used later for the Manage custom library storage. It can be used later for the
:ref:`projectconf_extra_script` option from :ref:`projectconf`. :ref:`projectconf_lib_extra_dirs` option from :ref:`projectconf`.
Demo Demo
---- ----

View File

@ -14,7 +14,7 @@
import sys import sys
VERSION = (3, 0, 1) VERSION = (3, 1, 0)
__version__ = ".".join([str(s) for s in VERSION]) __version__ = ".".join([str(s) for s in VERSION])
__title__ = "platformio" __title__ = "platformio"

View File

@ -14,10 +14,11 @@
import hashlib import hashlib
import json import json
import os
import uuid import uuid
from copy import deepcopy from copy import deepcopy
from os import environ, getenv from os import environ, getenv, listdir, remove
from os.path import getmtime, isfile, join from os.path import dirname, getmtime, isdir, isfile, join
from time import time from time import time
from lockfile import LockFile from lockfile import LockFile
@ -50,9 +51,9 @@ DEFAULT_SETTINGS = {
"description": "Force verbose output when processing environments", "description": "Force verbose output when processing environments",
"value": False "value": False
}, },
"disable_ssl": { "enable_ssl": {
"description": "Disable SSL for PlatformIO services", "description": "Enable SSL for PlatformIO Services",
"value": True "value": False
}, },
"enable_telemetry": { "enable_telemetry": {
"description": "description":
@ -111,6 +112,85 @@ class State(object):
self._lockfile.release() self._lockfile.release()
class LocalCache(object):
def __init__(self, cache_dir=None):
self.cache_dir = cache_dir or join(util.get_home_dir(), ".cache")
if not self.cache_dir:
os.makedirs(self.cache_dir)
self.db_path = join(self.cache_dir, "db.data")
def __enter__(self):
if not isfile(self.db_path):
return self
newlines = []
found = False
with open(self.db_path) as fp:
for line in fp.readlines():
if "=" not in line:
continue
line = line.strip()
expire, path = line.split("=")
if time() < int(expire):
newlines.append(line)
continue
found = True
if isfile(path):
remove(path)
if not len(listdir(dirname(path))):
util.rmtree_(dirname(path))
if found:
with open(self.db_path, "w") as fp:
fp.write("\n".join(newlines) + "\n")
return self
def __exit__(self, type_, value, traceback):
pass
def get_cache_path(self, key):
assert len(key) > 3
return join(self.cache_dir, key[-2:], key)
@staticmethod
def key_from_args(*args):
h = hashlib.md5()
for data in args:
h.update(str(data))
return h.hexdigest()
def get(self, key):
cache_path = self.get_cache_path(key)
if not isfile(cache_path):
return None
with open(cache_path) as fp:
data = fp.read()
if data[0] in ("{", "["):
return json.loads(data)
return data
def set(self, key, data, valid):
if not data:
return
tdmap = {"s": 1, "m": 60, "h": 3600, "d": 86400}
assert valid.endswith(tuple(tdmap.keys()))
cache_path = self.get_cache_path(key)
if not isdir(dirname(cache_path)):
os.makedirs(dirname(cache_path))
with open(cache_path, "w") as fp:
if isinstance(data, dict) or isinstance(data, list):
json.dump(data, fp)
else:
fp.write(str(data))
expire_time = int(time() + tdmap[valid[-1]] * int(valid[:-1]))
with open(self.db_path, "w+") as fp:
fp.write("%s=%s\n" % (str(expire_time), cache_path))
return True
def clean(self):
if isdir(self.cache_dir):
util.rmtree_(self.cache_dir)
def sanitize_setting(name, value): def sanitize_setting(name, value):
if name not in DEFAULT_SETTINGS: if name not in DEFAULT_SETTINGS:
raise InvalidSettingName(name) raise InvalidSettingName(name)

View File

@ -46,8 +46,8 @@ commonvars.AddVariables(
# library options # library options
("LIB_LDF_MODE",), ("LIB_LDF_MODE",),
("LIB_COMPAT_MODE",), ("LIB_COMPAT_MODE",),
("LIB_DEPS",),
("LIB_IGNORE",), ("LIB_IGNORE",),
("LIB_FORCE",),
("LIB_EXTRA_DIRS",), ("LIB_EXTRA_DIRS",),
# board options # board options
@ -121,7 +121,7 @@ for var in ("BUILD_FLAGS", "SRC_BUILD_FLAGS", "SRC_FILTER", "EXTRA_SCRIPT",
env[var] = environ.get(k) env[var] = environ.get(k)
# Parse comma separated items # Parse comma separated items
for opt in ("LIB_IGNORE", "LIB_FORCE", "LIB_EXTRA_DIRS"): for opt in ("LIB_DEPS", "LIB_IGNORE", "LIB_EXTRA_DIRS"):
if opt not in env: if opt not in env:
continue continue
env[opt] = [l.strip() for l in env[opt].split(", ") if l.strip()] env[opt] = [l.strip() for l in env[opt].split(", ") if l.strip()]

View File

@ -331,9 +331,12 @@ class ProjectAsLibBuilder(LibBuilderBase):
pass pass
def search_deps_recursive(self, lib_builders, search_paths=None): def search_deps_recursive(self, lib_builders, search_paths=None):
for lib_name in self.env.get("LIB_FORCE", []): for dep in self.env.get("LIB_DEPS", []):
for token in ("@", "="):
if token in dep:
dep, _ = dep.split(token, 1)
for lb in lib_builders: for lb in lib_builders:
if lb.name == lib_name: if lb.name == dep:
if lb not in self.depbuilders: if lb not in self.depbuilders:
self.depend_recursive(lb, lib_builders) self.depend_recursive(lb, lib_builders)
break break
@ -549,7 +552,7 @@ def GetLibBuilders(env):
if verbose and found_incompat: if verbose and found_incompat:
sys.stderr.write( sys.stderr.write(
"More details about \"Library Compatibility Mode\": " "More details about \"Library Compatibility Mode\": "
"http://docs.platformio.org/en/latest/librarymanager/ldf.html#" "http://docs.platformio.org/en/stable/librarymanager/ldf.html#"
"ldf-compat-mode\n") "ldf-compat-mode\n")
return items return items

View File

@ -146,6 +146,8 @@ class InoToCPPConverter(object):
def _get_total_lines(self, contents): def _get_total_lines(self, contents):
total = 0 total = 0
if contents.endswith("\n"):
contents = contents[:-1]
for line in contents.split("\n")[::-1]: for line in contents.split("\n")[::-1]:
linenum = self._parse_preproc_line_num(line) linenum = self._parse_preproc_line_num(line)
if linenum is not None: if linenum is not None:
@ -164,7 +166,7 @@ class InoToCPPConverter(object):
("|".join(prototype_names)), ("|".join(prototype_names)),
contents[:split_pos], re.M) contents[:split_pos], re.M)
if match_ptrs: if match_ptrs:
split_pos = contents.rfind("\n", 0, match_ptrs.start()) split_pos = contents.rfind("\n", 0, match_ptrs.start()) + 1
result = [] result = []
result.append(contents[:split_pos].strip()) result.append(contents[:split_pos].strip())

View File

@ -115,8 +115,10 @@ def AutodetectUploadPort(*args, **kwargs): # pylint: disable=unused-argument
if env.subst("$PIOFRAMEWORK") == "mbed": if env.subst("$PIOFRAMEWORK") == "mbed":
env.Replace(UPLOAD_PORT=_look_for_mbed_disk()) env.Replace(UPLOAD_PORT=_look_for_mbed_disk())
else: else:
if (system() == "Linux" and if (system() == "Linux" and not any([
not isfile("/etc/udev/99-platformio-udev.rules")): isfile("/etc/udev/99-platformio-udev.rules"),
isfile("/etc/rules.d/99-platformio-udev.rules")
])):
sys.stderr.write( sys.stderr.write(
"\nWarning! Please install `99-platformio-udev.rules` and " "\nWarning! Please install `99-platformio-udev.rules` and "
"check that your board's PID and VID are listed in the rules." "check that your board's PID and VID are listed in the rules."

View File

@ -16,7 +16,7 @@ import json
import click import click
from platformio.exception import APIRequestError from platformio.exception import APIRequestError, InternetIsOffline
from platformio.managers.platform import PlatformManager from platformio.managers.platform import PlatformManager
@ -92,10 +92,13 @@ def _get_boards(installed=False):
boards = PlatformManager().get_installed_boards() boards = PlatformManager().get_installed_boards()
if not installed: if not installed:
know_boards = ["%s:%s" % (b['platform'], b['id']) for b in boards] know_boards = ["%s:%s" % (b['platform'], b['id']) for b in boards]
try:
for board in PlatformManager().get_registered_boards(): for board in PlatformManager().get_registered_boards():
key = "%s:%s" % (board['platform'], board['id']) key = "%s:%s" % (board['platform'], board['id'])
if key not in know_boards: if key not in know_boards:
boards.append(board) boards.append(board)
except InternetIsOffline:
pass
return boards return boards

View File

@ -26,12 +26,6 @@ from platformio.commands.init import validate_boards
from platformio.commands.run import cli as cmd_run from platformio.commands.run import cli as cmd_run
from platformio.exception import CIBuildEnvsEmpty from platformio.exception import CIBuildEnvsEmpty
# pylint: disable=wrong-import-order
try:
from configparser import ConfigParser
except ImportError:
from ConfigParser import ConfigParser
def validate_path(ctx, param, value): # pylint: disable=unused-argument def validate_path(ctx, param, value): # pylint: disable=unused-argument
invalid_path = None invalid_path = None
@ -175,9 +169,8 @@ def _exclude_contents(dst_dir, patterns):
def _copy_project_conf(build_dir, project_conf): def _copy_project_conf(build_dir, project_conf):
cp = ConfigParser() config = util.load_project_config(project_conf)
cp.read(project_conf) if config.has_section("platformio"):
if cp.has_section("platformio"): config.remove_section("platformio")
cp.remove_section("platformio")
with open(join(build_dir, "platformio.ini"), "w") as fp: with open(join(build_dir, "platformio.ini"), "w") as fp:
cp.write(fp) config.write(fp)

View File

@ -12,6 +12,8 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
# pylint: disable=too-many-arguments,too-many-locals, too-many-branches
from os import getcwd, makedirs from os import getcwd, makedirs
from os.path import isdir, isfile, join from os.path import isdir, isfile, join
from shutil import copyfile from shutil import copyfile
@ -27,19 +29,14 @@ from platformio.managers.platform import PlatformManager
def validate_boards(ctx, param, value): # pylint: disable=W0613 def validate_boards(ctx, param, value): # pylint: disable=W0613
pm = PlatformManager() pm = PlatformManager()
# check installed boards for id_ in value:
known_boards = set([b['id'] for b in pm.get_installed_boards()])
# if boards are not listed as installed, check registered boards
if set(value) - known_boards:
known_boards = set([b['id'] for b in pm.get_registered_boards()])
unknown_boards = set(value) - known_boards
try: try:
assert not unknown_boards pm.board_config(id_)
except exception.UnknownBoard:
raise click.BadParameter(
"`%s`. Please search for board ID using `platformio boards` "
"command" % id_)
return value return value
except AssertionError:
raise click.BadParameter("%s. Please search for the board ID using "
"`platformio boards` command" %
", ".join(unknown_boards))
@click.command( @click.command(
@ -287,10 +284,8 @@ def init_cvs_ignore(project_dir):
fp.writelines(current) fp.writelines(current)
def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals def fill_project_envs(ctx, project_dir, board_ids, project_option, env_prefix,
ctx, project_dir, board_ids, project_option, env_prefix,
force_download): force_download):
installed_boards = PlatformManager().get_installed_boards()
content = [] content = []
used_boards = [] used_boards = []
used_platforms = [] used_platforms = []
@ -302,33 +297,30 @@ def fill_project_envs( # pylint: disable=too-many-arguments,too-many-locals
continue continue
used_boards.append(config.get(section, "board")) used_boards.append(config.get(section, "board"))
pm = PlatformManager()
for id_ in board_ids: for id_ in board_ids:
manifest = None board_config = pm.board_config(id_)
for boards in (installed_boards, used_platforms.append(board_config['platform'])
PlatformManager.get_registered_boards()):
for b in boards:
if b['id'] == id_:
manifest = b
break
assert manifest is not None
used_platforms.append(manifest['platform'])
if id_ in used_boards: if id_ in used_boards:
continue continue
used_boards.append(id_) used_boards.append(id_)
envopts = {"platform": board_config['platform'], "board": id_}
# find default framework for board
frameworks = board_config.get("frameworks")
if frameworks:
envopts['framework'] = frameworks[0]
for item in project_option:
if "=" not in item:
continue
_name, _value = item.split("=", 1)
envopts[_name.strip()] = _value.strip()
content.append("") content.append("")
content.append("[env:%s%s]" % (env_prefix, id_)) content.append("[env:%s%s]" % (env_prefix, id_))
content.append("platform = %s" % manifest['platform']) for name, value in envopts.items():
content.append("%s = %s" % (name, value))
# find default framework for board
frameworks = manifest.get("frameworks")
if frameworks:
content.append("framework = %s" % frameworks[0])
content.append("board = %s" % id_)
if project_option:
content.extend(project_option)
if force_download and used_platforms: if force_download and used_platforms:
_install_dependent_platforms(ctx, used_platforms) _install_dependent_platforms(ctx, used_platforms)

View File

@ -180,8 +180,10 @@ def lib_search(query, json_output, page, noninteractive, **filters):
query.append('%s:"%s"' % (key, value)) query.append('%s:"%s"' % (key, value))
result = get_api_result( result = get_api_result(
"/lib/search", dict( "/lib/search",
query=" ".join(query), page=page)) dict(
query=" ".join(query), page=page),
cache_valid="3d")
if json_output: if json_output:
click.echo(json.dumps(result)) click.echo(json.dumps(result))
@ -232,7 +234,8 @@ def lib_search(query, json_output, page, noninteractive, **filters):
result = get_api_result( result = get_api_result(
"/lib/search", "/lib/search",
dict( dict(
query=" ".join(query), page=int(result['page']) + 1)) query=" ".join(query), page=int(result['page']) + 1),
cache_valid="3d")
@cli.command("list", short_help="List installed libraries") @cli.command("list", short_help="List installed libraries")

View File

@ -48,7 +48,7 @@ def _print_platforms(platforms):
@click.option("--json-output", is_flag=True) @click.option("--json-output", is_flag=True)
def platform_search(query, json_output): def platform_search(query, json_output):
platforms = [] platforms = []
for platform in util.get_api_result("/platforms"): for platform in util.get_api_result("/platforms", cache_valid="365d"):
if query == "all": if query == "all":
query = "" query = ""

View File

@ -80,21 +80,18 @@ def cli(ctx, environment, target, upload_port, project_dir, silent, verbose,
for e in config.get("platformio", "env_default").split(",") for e in config.get("platformio", "env_default").split(",")
] ]
results = [] results = {}
start_time = time()
for section in config.sections(): for section in config.sections():
# skip main configuration section
if section == "platformio":
continue
if not section.startswith("env:"): if not section.startswith("env:"):
raise exception.InvalidEnvName(section) continue
envname = section[4:] envname = section[4:]
skipenv = any([environment and envname not in environment, skipenv = any([environment and envname not in environment,
not environment and env_default and not environment and env_default and
envname not in env_default]) envname not in env_default])
if skipenv: if skipenv:
# echo("Skipped %s environment" % style(envname, fg="yellow")) results[envname] = None
continue continue
if results: if results:
@ -108,9 +105,34 @@ def cli(ctx, environment, target, upload_port, project_dir, silent, verbose,
ep = EnvironmentProcessor(ctx, envname, options, target, ep = EnvironmentProcessor(ctx, envname, options, target,
upload_port, silent, verbose) upload_port, silent, verbose)
results.append(ep.process()) results[envname] = ep.process()
if not all(results): if len(results) > 1:
click.echo()
print_header("[%s]" % click.style("SUMMARY"))
successed = True
for envname, status in results.items():
status_str = click.style("SUCCESS", fg="green")
if status is False:
successed = False
status_str = click.style("ERROR", fg="red")
elif status is None:
status_str = click.style("SKIP", fg="yellow")
click.echo(
"Environment %s\t[%s]" % (click.style(
envname, fg="cyan"), status_str),
err=status is False)
print_header(
"[%s] Took %.2f seconds" % ((click.style(
"SUCCESS", fg="green",
bold=True) if successed else click.style(
"ERROR", fg="red", bold=True)), time() - start_time),
is_error=not successed)
if any([r is False for r in results.values()]):
raise exception.ReturnErrorCode() raise exception.ReturnErrorCode()
return True return True
@ -128,7 +150,7 @@ class EnvironmentProcessor(object):
REMAPED_OPTIONS = {"framework": "pioframework", "platform": "pioplatform"} REMAPED_OPTIONS = {"framework": "pioframework", "platform": "pioplatform"}
RENAMED_OPTIONS = {"lib_use": "lib_force"} RENAMED_OPTIONS = {"lib_use": "lib_deps", "lib_force": "lib_deps"}
RENAMED_PLATFORMS = {"espressif": "espressif8266"} RENAMED_PLATFORMS = {"espressif": "espressif8266"}
@ -152,18 +174,15 @@ class EnvironmentProcessor(object):
terminal_width, _ = click.get_terminal_size() terminal_width, _ = click.get_terminal_size()
start_time = time() start_time = time()
process_opts = [] # multi-line values to one line
for k, v in self.options.items(): for k, v in self.options.items():
if "\n" in v: if "\n" in v:
process_opts.append((k, ", ".join( self.options[k] = self.options[k].strip().replace("\n", ", ")
[s.strip() for s in v.split("\n") if s.strip()])))
else:
process_opts.append((k, v))
click.echo("[%s] Processing %s (%s)" % click.echo("[%s] Processing %s (%s)" % (
(datetime.now().strftime("%c"), click.style( datetime.now().strftime("%c"), click.style(
self.name, fg="cyan", bold=True), self.name, fg="cyan", bold=True),
", ".join(["%s: %s" % opts for opts in process_opts]))) ", ".join(["%s: %s" % (k, v) for k, v in self.options.items()])))
click.secho("-" * terminal_width, bold=True) click.secho("-" * terminal_width, bold=True)
if self.silent: if self.silent:
click.echo("Please wait...") click.echo("Please wait...")
@ -248,9 +267,7 @@ class EnvironmentProcessor(object):
], self.verbose) ], self.verbose)
if "lib_deps" in self.options: if "lib_deps" in self.options:
_autoinstall_libdeps(self.cmd_ctx, [ _autoinstall_libdeps(self.cmd_ctx, [
d.strip() d.strip() for d in self.options['lib_deps'].split(", ")
for d in self.options['lib_deps'].split(
"\n" if "\n" in self.options['lib_deps'] else ", ")
if d.strip() if d.strip()
], self.verbose) ], self.verbose)
@ -258,7 +275,9 @@ class EnvironmentProcessor(object):
p = PlatformFactory.newPlatform(self.options['platform']) p = PlatformFactory.newPlatform(self.options['platform'])
except exception.UnknownPlatform: except exception.UnknownPlatform:
self.cmd_ctx.invoke( self.cmd_ctx.invoke(
cmd_platform_install, platforms=[self.options['platform']]) cmd_platform_install,
platforms=[self.options['platform']],
skip_default_package=True)
p = PlatformFactory.newPlatform(self.options['platform']) p = PlatformFactory.newPlatform(self.options['platform'])
return p.run(build_vars, build_targets, self.silent, self.verbose) return p.run(build_vars, build_targets, self.silent, self.verbose)
@ -269,7 +288,11 @@ def _autoinstall_libdeps(ctx, libraries, verbose=False):
ctx.obj = LibraryManager(storage_dir) ctx.obj = LibraryManager(storage_dir)
if verbose: if verbose:
click.echo("Library Storage: " + storage_dir) click.echo("Library Storage: " + storage_dir)
ctx.invoke(cmd_lib_install, libraries=libraries, silent=not verbose) for lib in libraries:
try:
ctx.invoke(cmd_lib_install, libraries=[lib], silent=not verbose)
except exception.LibNotFound as e:
click.secho("Warning! %s" % e, fg="yellow")
def _clean_pioenvs_dir(pioenvs_dir): def _clean_pioenvs_dir(pioenvs_dir):

View File

@ -41,6 +41,7 @@ class FileDownloader(object):
if disposition and "filename=" in disposition: if disposition and "filename=" in disposition:
self._fname = disposition[disposition.index("filename=") + self._fname = disposition[disposition.index("filename=") +
9:].replace('"', "").replace("'", "") 9:].replace('"', "").replace("'", "")
self._fname = self._fname.encode("utf8")
else: else:
self._fname = url.split("/")[-1] self._fname = url.split("/")[-1]

View File

@ -50,7 +50,7 @@ class PlatformNotInstalledYet(PlatformioException):
class BoardNotDefined(PlatformioException): class BoardNotDefined(PlatformioException):
MESSAGE = "You need to specify board type using `-b` or `--board` "\ MESSAGE = "You need to specify board ID using `-b` or `--board` "\
"option. Supported boards list is available via "\ "option. Supported boards list is available via "\
" `platformio boards` command" " `platformio boards` command"
@ -131,11 +131,6 @@ class ProjectEnvsNotAvailable(PlatformioException):
MESSAGE = "Please setup environments in `platformio.ini` file" MESSAGE = "Please setup environments in `platformio.ini` file"
class InvalidEnvName(PlatformioException):
MESSAGE = "Invalid environment '{0}'. The name must start with 'env:'"
class UnknownEnvNames(PlatformioException): class UnknownEnvNames(PlatformioException):
MESSAGE = "Unknown environment names '{0}'. Valid names are '{1}'" MESSAGE = "Unknown environment names '{0}'. Valid names are '{1}'"
@ -156,9 +151,16 @@ class APIRequestError(PlatformioException):
MESSAGE = "[API] {0}" MESSAGE = "[API] {0}"
class InternetIsOffline(PlatformioException):
MESSAGE = "You are not connected to the Internet"
class LibNotFound(PlatformioException): class LibNotFound(PlatformioException):
MESSAGE = "Library `{0}` has not been found in the registry" MESSAGE = "Library `{0}` has not been found in PlatformIO Registry.\n"\
"You can ignore this message, if `{0}` is a built-in library "\
"(included in framework, SDK). E.g., SPI, Wire, etc."
class NotGlobalLibDir(PlatformioException): class NotGlobalLibDir(PlatformioException):

View File

@ -1,8 +1,8 @@
set(ENV{PATH} "{{env_path}}") set(ENV{PATH} "{{env_path}}")
set(PLATFORMIO_CMD "{{platformio_path}}") set(PLATFORMIO_CMD "{{platformio_path}}")
SET(CMAKE_C_COMPILER "{{cc_path}}") SET(CMAKE_C_COMPILER "{{cc_path.replace("\\", "/")}}")
SET(CMAKE_CXX_COMPILER "{{cxx_path}}") SET(CMAKE_CXX_COMPILER "{{cxx_path.replace("\\", "/")}}")
SET(CMAKE_CXX_FLAGS_DISTRIBUTION "{{cxx_flags}}") SET(CMAKE_CXX_FLAGS_DISTRIBUTION "{{cxx_flags}}")
SET(CMAKE_C_FLAGS_DISTRIBUTION "{{cc_flags}}") SET(CMAKE_C_FLAGS_DISTRIBUTION "{{cc_flags}}")
@ -22,4 +22,4 @@ include_directories("{{include.replace("\\", "/")}}")
% end % end
% end % end
aux_source_directory({{project_src_dir}} SRC_LIST) aux_source_directory({{project_src_dir.replace("\\", "/")}} SRC_LIST)

View File

@ -34,12 +34,19 @@ from platformio.managers.platform import PlatformManager
from platformio.pioplus import pioplus_update from platformio.pioplus import pioplus_update
def in_silence(ctx): def in_silence(ctx=None):
ctx = ctx or app.get_session_var("command_ctx")
assert ctx
ctx_args = ctx.args or [] ctx_args = ctx.args or []
return (ctx_args and return (ctx_args and
(ctx.args[0] == "upgrade" or "--json-output" in ctx_args)) (ctx.args[0] == "upgrade" or "--json-output" in ctx_args))
def clean_cache():
with app.LocalCache() as lc:
lc.clean()
def on_platformio_start(ctx, force, caller): def on_platformio_start(ctx, force, caller):
if not caller: if not caller:
if getenv("PLATFORMIO_CALLER"): if getenv("PLATFORMIO_CALLER"):
@ -52,6 +59,8 @@ def on_platformio_start(ctx, force, caller):
app.set_session_var("caller_id", caller) app.set_session_var("caller_id", caller)
telemetry.on_command() telemetry.on_command()
if ctx.args and (ctx.args[0] == "upgrade" or "update" in ctx.args):
clean_cache()
if not in_silence(ctx): if not in_silence(ctx):
after_upgrade(ctx) after_upgrade(ctx)
@ -145,7 +154,7 @@ def after_upgrade(ctx):
app.set_state_item("last_version", __version__) app.set_state_item("last_version", __version__)
else: else:
click.secho("Please wait while upgrading PlatformIO ...", fg="yellow") click.secho("Please wait while upgrading PlatformIO ...", fg="yellow")
clean_cache()
u = Upgrader(last_version, __version__) u = Upgrader(last_version, __version__)
if u.run(ctx): if u.run(ctx):
app.set_state_item("last_version", __version__) app.set_state_item("last_version", __version__)
@ -153,7 +162,6 @@ def after_upgrade(ctx):
# update development platforms # update development platforms
pm = PlatformManager() pm = PlatformManager()
for manifest in pm.get_installed(): for manifest in pm.get_installed():
# @TODO Uncomment line below after first PIO3 release
# pm.update(manifest['name'], "^" + manifest['version']) # pm.update(manifest['name'], "^" + manifest['version'])
pm.update(manifest['name']) pm.update(manifest['name'])
@ -191,9 +199,9 @@ def after_upgrade(ctx):
"try", fg="cyan"), click.style( "try", fg="cyan"), click.style(
"http://platformio.org/platformio-ide", fg="cyan"))) "http://platformio.org/platformio-ide", fg="cyan")))
if not util.is_ci(): if not util.is_ci():
click.echo("- %s to keep PlatformIO alive! > %s" % (click.style( click.echo("- %s us with PlatformIO Plus > %s" % (click.style(
"donate", fg="cyan"), click.style( "support", fg="cyan"), click.style(
"http://platformio.org/donate", fg="cyan"))) "https://pioplus.com", fg="cyan")))
click.echo("*" * terminal_width) click.echo("*" * terminal_width)
click.echo("") click.echo("")

View File

@ -20,7 +20,7 @@ from os.path import dirname, join
import click import click
import semantic_version import semantic_version
from platformio import commands, exception, util from platformio import app, commands, exception, util
from platformio.managers.package import BasePkgManager from platformio.managers.package import BasePkgManager
@ -194,31 +194,39 @@ class LibraryManager(BasePkgManager):
raise exception.UndefinedPackageVersion(requirements or "latest", raise exception.UndefinedPackageVersion(requirements or "latest",
util.get_systype()) util.get_systype())
dl_data = util.get_api_result( dl_data = util.get_api_result(
"/lib/download/" + str(name[3:]), dict(version=version)) "/lib/download/" + str(name[3:]),
dict(version=version),
cache_valid="30d")
assert dl_data assert dl_data
pkg_dir = None
try:
pkg_dir = self._install_from_url(
name, dl_data['url'].replace("http://", "https://"),
requirements)
except exception.APIRequestError:
pkg_dir = self._install_from_url(name, dl_data['url'],
requirements)
return pkg_dir
def install(self, # pylint: disable=too-many-arguments return self._install_from_url(
name, dl_data['url'].replace("http://", "https://")
if app.get_setting("enable_ssl") else dl_data['url'], requirements)
def install(self, # pylint: disable=too-many-arguments, too-many-locals
name, name,
requirements=None, requirements=None,
silent=False, silent=False,
trigger_event=True, trigger_event=True,
interactive=False): interactive=False):
already_installed = False
_name, _requirements, _url = self.parse_pkg_name(name, requirements) _name, _requirements, _url = self.parse_pkg_name(name, requirements)
try:
if not _url: if not _url:
_name = "id=%d" % self._get_pkg_id_by_name( _name = "id=%d" % self._get_pkg_id_by_name(
_name, _requirements, silent=silent, interactive=interactive) _name,
_requirements,
silent=silent,
interactive=interactive)
already_installed = self.get_package(_name, _requirements, _url) already_installed = self.get_package(_name, _requirements, _url)
pkg_dir = BasePkgManager.install(self, _name if not _url else name, pkg_dir = BasePkgManager.install(
_requirements, silent, trigger_event) self, _name
if not _url else name, _requirements, silent, trigger_event)
except exception.InternetIsOffline as e:
if not silent:
click.secho(str(e), fg="yellow")
return
if already_installed: if already_installed:
return return
@ -235,8 +243,13 @@ class LibraryManager(BasePkgManager):
if any([s in filters.get("version", "") for s in ("\\", "/")]): if any([s in filters.get("version", "") for s in ("\\", "/")]):
self.install("{name}={version}".format(**filters)) self.install("{name}={version}".format(**filters))
else: else:
try:
lib_info = self.search_for_library(filters, silent, lib_info = self.search_for_library(filters, silent,
interactive) interactive)
except exception.LibNotFound as e:
click.secho("Warning! %s" % e, fg="yellow")
continue
if filters.get("version"): if filters.get("version"):
self.install( self.install(
lib_info['id'], lib_info['id'],
@ -273,7 +286,7 @@ class LibraryManager(BasePkgManager):
lib_info = None lib_info = None
result = util.get_api_result( result = util.get_api_result(
"/lib/search", dict(query=" ".join(query))) "/lib/search", dict(query=" ".join(query)), cache_valid="3d")
if result['total'] == 1: if result['total'] == 1:
lib_info = result['items'][0] lib_info = result['items'][0]
elif result['total'] > 1: elif result['total'] > 1:

View File

@ -542,11 +542,23 @@ class BasePkgManager(PkgRepoMixin, PkgInstallerMixin):
except exception.PlatformioException: except exception.PlatformioException:
pass pass
if not latest_version: if not latest_version:
click.echo("[%s]" % (click.style("Unknown", fg="yellow"))) click.echo("[%s]" % (click.style(
"Off-line" if not util.internet_on() else "Unknown",
fg="yellow")))
return return
if manifest['version'] == latest_version:
up_to_date = False
try:
up_to_date = (
semantic_version.Version.coerce(manifest['version']) >=
semantic_version.Version.coerce(latest_version))
except ValueError:
up_to_date = latest_version == manifest['version']
if up_to_date:
click.echo("[%s]" % (click.style("Up-to-date", fg="green"))) click.echo("[%s]" % (click.style("Up-to-date", fg="green")))
return return
click.echo("[%s]" % (click.style("Out-of-date", fg="red"))) click.echo("[%s]" % (click.style("Out-of-date", fg="red")))
if only_check: if only_check:
return return

View File

@ -30,8 +30,9 @@ class PlatformManager(BasePkgManager):
def __init__(self, package_dir=None, repositories=None): def __init__(self, package_dir=None, repositories=None):
if not repositories: if not repositories:
repositories = [ repositories = [
"https://dl.bintray.com/platformio/dl-platforms/manifest.json",
"{0}://dl.platformio.org/platforms/manifest.json".format( "{0}://dl.platformio.org/platforms/manifest.json".format(
"http" if app.get_setting("disable_ssl") else "https") "https" if app.get_setting("enable_ssl") else "http")
] ]
BasePkgManager.__init__(self, package_dir or BasePkgManager.__init__(self, package_dir or
join(util.get_home_dir(), "platforms"), join(util.get_home_dir(), "platforms"),
@ -116,13 +117,23 @@ class PlatformManager(BasePkgManager):
@staticmethod @staticmethod
@util.memoized @util.memoized
def get_registered_boards(): def get_registered_boards():
return util.get_api_result("/boards") return util.get_api_result("/boards", cache_valid="365d")
def board_config(self, id_):
for manifest in self.get_installed_boards():
if manifest['id'] == id_:
return manifest
for manifest in self.get_registered_boards():
if manifest['id'] == id_:
return manifest
raise exception.UnknownBoard(id_)
class PlatformFactory(object): class PlatformFactory(object):
@staticmethod @staticmethod
def get_clsname(name): def get_clsname(name):
name = re.sub(r"[^\da-z\_]+", "", name, flags=re.I)
return "%s%sPlatform" % (name.upper()[0], name.lower()[1:]) return "%s%sPlatform" % (name.upper()[0], name.lower()[1:])
@staticmethod @staticmethod
@ -223,7 +234,7 @@ class PlatformPackagesMixin(object):
class PlatformRunMixin(object): class PlatformRunMixin(object):
LINE_ERROR_RE = re.compile(r"(\s+error|error[:\s]+)", re.I) LINE_ERROR_RE = re.compile(r"(^|\s+)error:?\s+", re.I)
def run(self, variables, targets, silent, verbose): def run(self, variables, targets, silent, verbose):
assert isinstance(variables, dict) assert isinstance(variables, dict)
@ -353,12 +364,6 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin):
def packages(self): def packages(self):
if "packages" not in self._manifest: if "packages" not in self._manifest:
self._manifest['packages'] = {} self._manifest['packages'] = {}
if "tool-scons" not in self._manifest['packages']:
self._manifest['packages']['tool-scons'] = {
"version": self._manifest.get("engines", {}).get(
"scons", ">=2.3.0,<2.6.0"),
"optional": False
}
return self._manifest['packages'] return self._manifest['packages']
def get_dir(self): def get_dir(self):
@ -457,6 +462,12 @@ class PlatformBase(PlatformPackagesMixin, PlatformRunMixin):
"version": "~1.20302.1", "version": "~1.20302.1",
"optional": False "optional": False
} }
if "tool-scons" not in self.packages:
self.packages['tool-scons'] = {
"version": self._manifest.get("engines", {}).get(
"scons", ">=2.3.0,<2.6.0"),
"optional": False
}
class PlatformBoardConfig(object): class PlatformBoardConfig(object):
@ -494,16 +505,20 @@ class PlatformBoardConfig(object):
return False return False
@property @property
def id_(self): def id(self):
return self._id return self._id
@property
def id_(self):
return self.id
@property @property
def manifest(self): def manifest(self):
return self._manifest return self._manifest
def get_brief_data(self): def get_brief_data(self):
return { return {
"id": self.id_, "id": self.id,
"name": self._manifest['name'], "name": self._manifest['name'],
"platform": self._manifest.get("platform"), "platform": self._manifest.get("platform"),
"mcu": self._manifest.get("build", {}).get("mcu", "").upper(), "mcu": self._manifest.get("build", {}).get("mcu", "").upper(),

View File

@ -17,7 +17,7 @@ import subprocess
from os.path import dirname, join from os.path import dirname, join
from platform import system from platform import system
from platformio import util from platformio import exception, util
from platformio.managers.package import PackageManager from platformio.managers.package import PackageManager
PACKAGE_PIOPLUS_NAME = "tool-pioplus" PACKAGE_PIOPLUS_NAME = "tool-pioplus"
@ -54,4 +54,5 @@ def pioplus_call(args, **kwargs):
os.environ['LD_LIBRARY_PATH'] = dirname(pioplus_path) os.environ['LD_LIBRARY_PATH'] = dirname(pioplus_path)
os.environ['PYTHONEXEPATH'] = util.get_pythonexe_path() os.environ['PYTHONEXEPATH'] = util.get_pythonexe_path()
util.copy_pythonpath_to_osenv() util.copy_pythonpath_to_osenv()
subprocess.call([pioplus_path] + args, **kwargs) if subprocess.call([pioplus_path] + args, **kwargs) != 0:
raise exception.ReturnErrorCode()

View File

@ -258,9 +258,11 @@ def on_event(category, action, label=None, value=None, screen_name=None):
def on_exception(e): def on_exception(e):
if any([isinstance(e, cls) skip = any(
[isinstance(e, cls)
for cls in (IOError, exception.AbortedByUser, for cls in (IOError, exception.AbortedByUser,
exception.NotGlobalLibDir)]): exception.NotGlobalLibDir, exception.InternetIsOffline)])
if skip:
return return
is_crash = any([ is_crash = any([
not isinstance(e, exception.PlatformioException), not isinstance(e, exception.PlatformioException),

View File

@ -17,6 +17,7 @@ import functools
import json import json
import os import os
import re import re
import socket
import stat import stat
import subprocess import subprocess
import sys import sys
@ -33,13 +34,34 @@ import requests
from platformio import __apiurl__, __version__, exception from platformio import __apiurl__, __version__, exception
# pylint: disable=wrong-import-order # pylint: disable=wrong-import-order, too-many-ancestors
try: try:
from configparser import ConfigParser from configparser import ConfigParser
except ImportError: except ImportError:
from ConfigParser import ConfigParser from ConfigParser import ConfigParser
class ProjectConfig(ConfigParser):
VARTPL_RE = re.compile(r"\$\{([^\.\}]+)\.([^\}]+)\}")
def items(self, section, **_):
items = []
for option in ConfigParser.options(self, section):
items.append((option, self.get(section, option)))
return items
def get(self, section, option, **kwargs):
value = ConfigParser.get(self, section, option, **kwargs)
if "${" not in value or "}" not in value:
return value
return self.VARTPL_RE.sub(self._re_sub_handler, value)
def _re_sub_handler(self, match):
return self.get(match.group(1), match.group(2))
class AsyncPipe(Thread): class AsyncPipe(Thread):
def __init__(self, outcallback=None): def __init__(self, outcallback=None):
@ -256,13 +278,15 @@ def get_projectdata_dir():
join(get_project_dir(), "data")) join(get_project_dir(), "data"))
def load_project_config(project_dir=None): def load_project_config(path=None):
if not project_dir: if not path or isdir(path):
project_dir = get_project_dir() project_dir = path or get_project_dir()
if not is_platformio_project(project_dir): if not is_platformio_project(project_dir):
raise exception.NotPlatformIOProject(project_dir) raise exception.NotPlatformIOProject(project_dir)
cp = ConfigParser() path = join(project_dir, "platformio.ini")
cp.read(join(project_dir, "platformio.ini")) assert isfile(path)
cp = ProjectConfig()
cp.read(path)
return cp return cp
@ -382,7 +406,7 @@ def _get_api_result(
headers = get_request_defheaders() headers = get_request_defheaders()
url = __apiurl__ url = __apiurl__
if get_setting("disable_ssl"): if not get_setting("enable_ssl"):
url = url.replace("https://", "http://") url = url.replace("https://", "http://")
try: try:
@ -409,15 +433,31 @@ def _get_api_result(
return result return result
def get_api_result(path, params=None, data=None): def get_api_result(path, params=None, data=None, cache_valid=None):
max_retries = 5 from platformio.app import LocalCache
total = 0 total = 0
max_retries = 5
cache_key = (LocalCache.key_from_args(path, params, data)
if cache_valid else None)
while total < max_retries: while total < max_retries:
try: try:
return _get_api_result(path, params, data) with LocalCache() as lc:
if cache_key:
result = lc.get(cache_key)
if result is not None:
return result
result = _get_api_result(path, params, data)
if cache_valid:
with LocalCache() as lc:
lc.set(cache_key, result, cache_valid)
return result
except (requests.exceptions.ConnectionError, except (requests.exceptions.ConnectionError,
requests.exceptions.Timeout) as e: requests.exceptions.Timeout) as e:
if not internet_on():
raise exception.InternetIsOffline()
from platformio.maintenance import in_silence
total += 1 total += 1
if not in_silence():
click.secho( click.secho(
"[API] ConnectionError: {0} (incremented retry: max={1}, " "[API] ConnectionError: {0} (incremented retry: max={1}, "
"total={2})".format(e, max_retries, total), "total={2})".format(e, max_retries, total),
@ -429,6 +469,17 @@ def get_api_result(path, params=None, data=None):
"Please try later.") "Please try later.")
def internet_on(timeout=3):
host = "8.8.8.8"
port = 53
try:
socket.setdefaulttimeout(timeout)
socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect((host, port))
return True
except: # pylint: disable=bare-except
return False
def get_pythonexe_path(): def get_pythonexe_path():
return os.environ.get("PYTHONEXEPATH", normpath(sys.executable)) return os.environ.get("PYTHONEXEPATH", normpath(sys.executable))

View File

@ -95,7 +95,7 @@ Packages
* - Name * - Name
- Contents""") - Contents""")
for name in sorted(packagenames): for name in sorted(packagenames):
assert name in API_PACKAGES assert name in API_PACKAGES, name
contitems = [ contitems = [
"`{name} <{url}>`_".format(**item) for item in API_PACKAGES[name] "`{name} <{url}>`_".format(**item) for item in API_PACKAGES[name]
] ]

View File

@ -132,6 +132,23 @@ def test_init_enable_auto_uploading(clirunner, validate_cliresult):
set(config.items("env:uno")))) == 0 set(config.items("env:uno")))) == 0
def test_init_custom_framework(clirunner, validate_cliresult):
with clirunner.isolated_filesystem():
result = clirunner.invoke(
cmd_init, ["-b", "teensy31", "--project-option", "framework=mbed"])
validate_cliresult(result)
validate_pioproject(getcwd())
config = util.load_project_config()
expected_result = [
("platform", "teensy"), ("framework", "mbed"),
("board", "teensy31")
]
assert config.has_section("env:teensy31")
assert len(
set(expected_result).symmetric_difference(
set(config.items("env:teensy31")))) == 0
def test_init_incorrect_board(clirunner): def test_init_incorrect_board(clirunner):
result = clirunner.invoke(cmd_init, ["-b", "missed_board"]) result = clirunner.invoke(cmd_init, ["-b", "missed_board"])
assert result.exit_code == 2 assert result.exit_code == 2

View File

@ -68,28 +68,20 @@ def test_install_uknown_version(clirunner, validate_cliresult):
def test_complex(clirunner, validate_cliresult): def test_complex(clirunner, validate_cliresult):
items = [
"teensy",
"https://github.com/platformio/platform-teensy/archive/develop.zip",
"https://github.com/platformio/platform-teensy.git",
"platformio/platform-teensy",
]
for item in items:
with clirunner.isolated_filesystem(): with clirunner.isolated_filesystem():
os.environ["PLATFORMIO_HOME_DIR"] = os.getcwd() os.environ["PLATFORMIO_HOME_DIR"] = os.getcwd()
try: try:
result = clirunner.invoke(cli_platform.platform_install, result = clirunner.invoke(
[item]) cli_platform.platform_install,
["teensy", "--with-package", "framework-arduinoteensy"])
validate_cliresult(result) validate_cliresult(result)
assert all([ assert all([
s in result.output s in result.output
for s in ("teensy", "Downloading", "Unpacking", for s in ("teensy", "Downloading", "Unpacking")
"tool-scons")
]) ])
# show platform information # show platform information
result = clirunner.invoke(cli_platform.platform_show, result = clirunner.invoke(cli_platform.platform_show, ["teensy"])
["teensy"])
validate_cliresult(result) validate_cliresult(result)
assert "teensy" in result.output assert "teensy" in result.output
@ -101,7 +93,7 @@ def test_complex(clirunner, validate_cliresult):
assert isinstance(list_result, list) assert isinstance(list_result, list)
assert len(list_result) == 1 assert len(list_result) == 1
assert list_result[0]["name"] == "teensy" assert list_result[0]["name"] == "teensy"
assert list_result[0]["packages"] == ["tool-scons"] assert list_result[0]["packages"] == ["framework-arduinoteensy"]
# try to install again # try to install again
result = clirunner.invoke(cli_platform.platform_install, result = clirunner.invoke(cli_platform.platform_install,
@ -110,17 +102,18 @@ def test_complex(clirunner, validate_cliresult):
assert "is already installed" in result.output assert "is already installed" in result.output
# try to update # try to update
for _ in range(2):
result = clirunner.invoke(cli_platform.platform_update) result = clirunner.invoke(cli_platform.platform_update)
validate_cliresult(result) validate_cliresult(result)
assert "teensy" in result.output assert "teensy" in result.output
assert "Up-to-date" in result.output assert "Up-to-date" in result.output
assert "Out-of-date" not in result.output
# try to uninstall # try to uninstall
result = clirunner.invoke(cli_platform.platform_uninstall, result = clirunner.invoke(cli_platform.platform_uninstall,
["teensy"]) ["teensy"])
validate_cliresult(result) validate_cliresult(result)
for folder in ("platforms", "packages"): for folder in ("platforms", "packages"):
assert len(os.listdir(join(util.get_home_dir(), assert len(os.listdir(join(util.get_home_dir(), folder))) == 0
folder))) == 0
finally: finally:
del os.environ["PLATFORMIO_HOME_DIR"] del os.environ["PLATFORMIO_HOME_DIR"]

View File

@ -23,7 +23,7 @@ def test_local_env():
result = util.exec_command(["platformio", "test", "-d", result = util.exec_command(["platformio", "test", "-d",
join("examples", "unit-testing", "calculator"), join("examples", "unit-testing", "calculator"),
"-e", "local"]) "-e", "local"])
if result['returncode'] != 0: if result['returncode'] != 1:
pytest.fail(result) pytest.fail(result)
assert all( assert all(
[s in result['out'] for s in ("[PASSED]", "[IGNORED]", "[FAILED]")]) [s in result['out'] for s in ("[PASSED]", "[IGNORED]", "[FAILED]")])

View File

@ -40,6 +40,8 @@ void myFunction(struct Item *item) {
} }
#warning "Line number is 43"
void fooCallback(){ void fooCallback(){
} }

View File

@ -42,6 +42,8 @@ def test_warning_line(clirunner, validate_cliresult):
validate_cliresult(result) validate_cliresult(result)
assert ('basic.ino:16:14: warning: #warning "Line number is 16"' in assert ('basic.ino:16:14: warning: #warning "Line number is 16"' in
result.output) result.output)
assert ('basic.ino:43:2: warning: #warning "Line number is 43"' in
result.output)
result = clirunner.invoke( result = clirunner.invoke(
cmd_ci, [join(INOTEST_DIR, "strmultilines"), "-b", "uno"]) cmd_ci, [join(INOTEST_DIR, "strmultilines"), "-b", "uno"])
validate_cliresult(result) validate_cliresult(result)