Arduino

Index

General

Maquinari / Hardware

Alimentació / Power supply

  • (Locoduino)



  • Uno
    Mega
    Nano
    Nano Every Pro Mini
    (5V model)
    Pro Mini
    (3.3V model)
    input
    unregulated
    input for onboard regulator
    jack 2.1 or "Vin": 7-12V DC jack 2.1 or "Vin": 7-12V DC "VIN" (pin 30): 6-20V "VIN": 7-21V DC "RAW": 7-12V DC "RAW": 7-12V DC
    USB

    B
    B
    mini-B
    micro-B (from FTDI adapter)
    (from FTDI adapter)
    regulated 5V (3.3V in certain models)

    -
    -
    "5V" (pin 27): 5V

    "VCC": 5V
    "VCC": 3.3V
    output
    5V
    output of onboard regulator
    "5V"
    "5V" "5V" (pin 27): 5V "+5V" "VCC": 5V

    3.3V 50mA
    output of onboard regulator "3.3V"
    "3.3V" 3.3V (pin 17)
    "+3V3"
    "VCC": 3.3V
    IOREF
    voltage reference with which the microcontroller operates
    x
    "IOREF"
    REF (pin 16)



Interfícies / Interfaces

Desenvolupament / Development

  • Getting started with Arduino and Genuino products
  • Arduino software
  • Program
  • Monitoratge sèrie / Serial monitor (without IDE; or monitoring a second Arduino)
  • IDE
  • Connexió USB / USB connection
    • afegiu el vostre usuari al grup dialout (grup propietari de /dev/ttyUSBxx) / add your user to group dialout (group owner of /dev/ttyUSBxx):
      • sudo usermod -a -G dialout my_user
      • newgrp dialout
    • journalctl -f
      • connecteu la placa / connect your board
      • NodeMCU
        • CH340
          • de gen. 11 18:52:16 localhost kernel: usb 1-2: ch341-uart converter now attached to ttyUSB0
    • lsusb
      • Arduino
        • Nano: ID 0403:6001 Future Technology Devices International, Ltd FT232 Serial (UART) IC
      • NodeMCU
        • CH340: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
  • Arduino IDE
    • Software
    • Instal·lació / Installation
      • 2.x
        • download nighty build arduino-ide_nightly-yyyymmdd_Linux_64bit.AppImage
        • chmod +x arduino-ide_nightly-yyyymmdd_Linux_64bit.AppImage
        • ./arduino-ide_nightly-yyyymmdd_Linux_64bit.AppImage
      • 1.x
      • Problemes / Problems
        • ...
    • Fitxers de configuració
      • 2.x
        • ~/.arduino15/preferences.txt
      • 1.x
        • ...
    • Configuració / Setup
      • 2.x
        • ~/.arduino15/
          • it will be created and populated the first time that IDE is launched
        • ~/.arduinoIDE/
        • ~/.config/
          • Arduino IDE/
          • arduino-ide/
      • boards info File -> Preferences -> Settings -> Additional boards manager URLs: Tools -> Board -> Boards Manager...




        will install to:
        ~/.arduino15/packages/
        Arduino



        ESP8266 https://arduino.esp8266.com/stable/package_esp8266com_index.json

        ESP32 https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json "esp32 by Espressif Systems" esp32/hardware/esp32/2.0.5/libraries/...
    • Ús / Usage (Arduino IDE 2.x)
      • File
        • Sketchbook (from ~/Arduino/)
        • Examples
          • Built-in Examples
          • Examples for ... (selected board) (from ~/.arduino15/...)
            • Examples for ESP32S3 Dev Module
              • ...
              • WebServer (~/.arduino15/packages/esp32/hardware/esp32/2.0.6/libraries/WebServer/examples/)
              • ...
          • Examples from Custom Libraries (from ~/Arduino/libraries/)
      • Editor
        • ...
      • Verifica
      • ESP32
        • Install board
        • Setup
          • select "ESP32S3 Dev Module"
          • Tools (Arduino IDE Tools Menu)
            • USB CDC On Boot: "Enable"
            • Flash Size: "16MB (128Mb)"
            • Partition Scheme: "Huge APP (3MB No OTA/1MB SPIFFS)"
            • PSRAM: "OPI PSRAM"
        • Install libraries
          • TFT_eSPI you should use TFT_eSPI provided by LilyGO. If you use official library (e.g. version ...) you will get a black screen. IMPORTANT: be careful that official library is not installed as an automatic upgrade.
    • Ús / Usage (Arduino IDE 1.x)
      • Arrencada / Start
        • des de la icona de l'escriptori / from desktop icon
          • prèviament heu d'haver executat install.sh / previous ./install is required
        • from command line
          • arduino (in /usr/local/bin/arduino)
      • Tools
        • Placa: ...
        • Port: /dev/ttyUSB0
      • Preferències / Preferences
        • Temes / Themes
        • Utilitza un editor extern / Use an exteral editor
          • Es pot fer servir qualsevol editor per a editar el fitxer (p.ex. emacs), i l'IDE per a verificar-lo i pujar-lo
      • Editor
        • ...
      • Verifica

        • ...
      • Program
        • Eines -> Informació de la placa
        • Obre (4a icona)
          • Basics -> Blink
          • crearà el codi font:
            • Blink.ino
        • Fitxer -> Sketchbook
          • projectes propis, desats a ~/Arduino/ (es pot canviar a Fitxer->Preferències->Ubicació del Sketchbook)
        • Esbós -> Verifica/Compila
          • crearà
            • Blink.ino.hex
            • ...
        • Esbós -> Puja
          • Problemes / Problems
            • PORTS {} / {} => {}
              Couldn't find a Board on the selected port. Check that you have the correct port selected.  If it is correct, try pressing the board's reset button after initiating the upload.
              • Solució / Solution
                • Segurament es tracta d'una placa ATmega32u4 (Micro, Leonardo)
                • Mentre apareixen les línies «PORTS {} / {} => {}», premeu dues vegades ràpidament el botó físic de la placa
                • ...
            • avrdude: jtagmkII_getsync(): sign-on command: status -1
              • Workaround
                • pugeu blink. Us apareixerà el missatge «Cannot locate "flash" and "boot" memories in description», però haurà funcionat
                • ara torneu a pujar l'esbós que voleu pujar
            • avrdude: jtagmkII_initialize(): Cannot locate "flash" and "boot" memories in description
              • Només és un avís que es pot ignorar / Just a warning. Can be safely ignored.
    • Problemes / Problems
      • ModuleNotFoundError: No module named 'serial'
        • Solució / Solution
          • sudo dnf install python3-serial
  • Command line
    • arduino-cli
    • arduino-1.8.5/hardware/tools/avr/bin
    • See detailed logs when using Upload button on Arduino IDE:
      • /disc/Baixades/arduino-1.8.5/arduino-builder \
        -compile \
        -logger=machine \
        -hardware /disc/Baixades/arduino-1.8.5/hardware \
        -tools /disc/Baixades/arduino-1.8.5/tools-builder \
        -tools /disc/Baixades/arduino-1.8.5/hardware/tools/avr \
        -built-in-libraries /disc/Baixades/arduino-1.8.5/libraries \
        -libraries /home/cesc/Arduino/libraries \
        -fqbn=arduino:avr:micro \
        -vid-pid=0X2341_0X8037 \
        -ide-version=10805 \
        -build-path /tmp/arduino_build_595924 \
        -warnings=all \
        -build-cache /tmp/arduino_cache_334524 \
        -prefs=build.warn_data_percentage=75 \
        -prefs=runtime.tools.arduinoOTA.path=/disc/Baixades/arduino-1.8.5/hardware/tools/avr \
        -prefs=runtime.tools.avrdude.path=/disc/Baixades/arduino-1.8.5/hardware/tools/avr \
        -prefs=runtime.tools.avr-gcc.path=/disc/Baixades/arduino-1.8.5/hardware/tools/avr \
        -verbose \
        /disc/Baixades/arduino-1.8.5/examples/01.Basics/Blink/Blink.ino
      • /disc/Baixades/arduino-1.8.5/hardware/tools/avr/bin/avrdude \
        -C/disc/Baixades/arduino-1.8.5/hardware/tools/avr/etc/avrdude.conf \
        -v \
        -patmega32u4 \
        -cavr109 \
        -P/dev/ttyACM0 \
        -b57600 \
        -D \
        -Uflash:w:/tmp/arduino_build_595924/Blink.ino.hex:i
    • Compile (.ino -> .hex) using arduino-builder:
      • arduino-builder ...
    • Upload (.hex file) to Arduino using avrdude:
      • AVR Tutorial: Starting out with avrdude
      • export ARDUINO_ROOT=/disc/Baixades/arduino-1.8.13 avrdude -C${ARDUINO_ROOT}/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D -Uflash:w:/tmp/arduino_build_595924/Blink.ino.hex:i
      • Problemes / Problems
        • avrdude: butterfly_recv(): programmer is not responding
          • Solució / Solution
              • desconnecteu el cable USB; torneu a connectar-lo
              • opció 1 (all software):
                • export ARDUINO_ROOT=/disc/Baixades/arduino-1.8.13 stty -F /dev/ttyACM0 1200 && sleep 1 && ${ARDUINO_ROOT}/hardware/tools/avr/bin/avrdude -C${ARDUINO_ROOT}/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D -Uflash:w:/tmp/arduino_build_979439/Blink.ino.hex:i
              • opció 2 (hardware + software):
                1. premeu ràpidament dues vegades el botó físic de reset de la placa: la placa es posarà en mode bootloader (led de la placa en parpelleig ràpid) durant uns 8 segons; durant aquest temps executeu el pas número 2 / quick double press the physical hardware reset button: th board will be in bootloader mode (quick flash of board led) for about 8 seconds; inside this period of time, perform the step number 2
                  • si durant aquests 8 segons feu lsusb
                    • ID 2a03:0037 dog hunter AG Arduino Micro (bootloader)
                2. ${ARDUINO_ROOT}/hardware/tools/avr/bin/avrdude -C${ARDUINO_ROOT}/hardware/tools/avr/etc/avrdude.conf -v -patmega32u4 -cavr109 -P/dev/ttyACM0 -b57600 -D -Uflash:w:/tmp/arduino_build_979439/Blink.ino.hex:i
  • Biblioteques / Libraries
  • Exemples / Examples
    • Starter kit
    • The Arduino playground
    • Tutorials
      • Foundations and More
        • Introduction
          • Language Reference



            Functions Digital I/O
            Analog I/O
            • analogRead()
            • analogReference()
            • analogWrite()
            Zero, Due & MKR Family
            • analogReadResolution()
            • analogWriteResolution()
            Advanced I/O
            • noTone()
            • pulseIn()
            • pulseInLong()
            • shiftIn()
            • shiftOut()
            • tone()
              • square wave
            Time
            • delay(ms)
            • delayMicroseconds()
            • micros()
              • overflow every 70 minutes
            • millis()
              • overflow every 50 days
            Math
            • abs(x)
            • constrain(x, a, b)
            • map(value, fromLow, fromHigh, toLow, toHigh)
            • max(x, y)
            • min(x, y)
            • pow(base, exponent)
            • sq(x)
            • sqrt(x)
            Trigonometry
            • cos(rad)
            • sin(rad)
            • tan(rad)
            Characters
            • isAlpha()
            • isAlphaNumeric()
            • isAscii()
            • isControl()
            • isDigit()
            • isGraph()
            • isHexadecimalDigit()
            • ilLowerCase()
            • isPrintable()
            • isPunct()
            • isSpace()
            • isUpperCase()
            • isWhiteSpace()
            Random Numbers
            • random()
            • randomSeed()
            Bits and Bytes
            • bit()
            • bitClear()
            • bitRead()
            • bitSet()
            • bitWrite()
            • highByte()
            • lowByte()
            External Interrupts
            • attachInterrupt()
            • detachInterrupt()
            Interrupts
            • interrupts()
            • noInterrupts()
            Communication
            • Serial
              • if(Serial), ..., print(), println(), write(), ...
            • SPI
            • Stream
              • available(), read(), flush(), ...
            • Wire (I2C: SDA, SCL)
              • #include <Wire.h>
              • begin(), end(), ...
            USB
            • Keyboard
            • Mouse
            Variables Constants
            • HIGH | LOW
            • INPUT | OUTPUT | INPUT_PULLUP
            • LED_BUILTIN
              • usually: pin 13
            • true | false
            • Integer Constants
              • n = 101; // decimal
              • n = 0b101; // binary
              • n = 0101; // octal
              • n = 0x101; // hexadecimal
              • n = 33u; // unsigned
              • n = 100000L; // long
              • n = 32767ul; // unsigned long
            • Floating Point Constants
              • float n = 0.005
            Conversion
            • (insigned int)
            • (unsigned long)
            • byte()
            • char()
            • float()
            • int()
            • long()
            • word()
            Data Types
            • array
            • bool
            • boolean
            • byte
            • char
            • double
            • float
            • int
            • long
            • short
            • size_t
            • string
            • String()
              • String stringOne = "Hello String";
              • String stringOne = String(255, BIN)
              • ...
              • Functions
                • charAt(), compareTo(), ...
              • Operators
                • [], +, ==, ...
            • unsigned char
            • unsigned int
            • unsigned long
            • void
            Variable Scope & Qualifiers
            • const
              • cannot be modified
            • scope
            • static
              • visible to only one function
              • persist between function calls
            • volatile
              • load the variable from RAM instead of storage register
            Utilities
            • PROGMEM
              • store data in flash (program) memory instead of SRAM
              • Arduino Memory Guide
              • F() macro
                • Serial.print(F("Write something on the Serial Monitor that is stored in FLASH"));
            • sizeof()
            Structure Sketch (C++)
            • setup()
              • run once
            • loop()
            Control Structure
            • break
            • continue
            • do...while
            • else
            • for (initialisation; condition; increment)
            • goto
            • if
            • return
            • switch...case
            • while
            Furher Syntax
            • #define
            • #include
              • #include <LibraryFile.h>
                • AVR C libraries: avr-libc
                • other installed libraries
              • #include "LocalFile.h"
                • files in the sketch folder
            • /**/
            • //
            • ;
            • {}
            Arithmetic Operations
            • % (remainder)
            • *
            • +
            • -
            • /
            • =
            Comparison Operators
            • !=
            • <
            • <=
            • ==
            • >
            • >=
            Boolean Operators
            • !
            • &&
            • ||
            Pointer Access Operators
            • & (the address of ...)
            • * (the value of address ...)
            Bitwise Operators
            • & (AND)
            • << (left shift)
            • >> (right shift)
            • ^ (XOR)
            • | (OR)
            • ~ (NOT)
            Compound Operators
            • %=
            • &=
            • *=
            • ++
              • x++; // increment x by one and returns the old value of x
              • ++x; // increment x by one and returns the new value of x
            • +=
            • --
              • x--; // decrement x by one and returns the old value of x
              • --x; // decrement x by one and returns the new value of x
            • -=
            • /=
            • ^=
            • |=
      • Built-In Examples
      • Examples from Libraries
      • Tutorials on Arduino Project Hub
    • Tutoriales y proyectos con Arduino (Naylamp)
    • Pantalles / Screens
      • LCD IIC (LCM1602)
      • Adafruit (Pantalla OLED 1.3' SH1106 128x64)
        • u8g2
          • Hardware SPI (use specific connections: D13-SCLK--CLK, D11-MOSI--MOSI)
            • U8G2_SH1106_128X64_NONAME_1_4W_HW_SPI(rotation, cs, dc [, reset])
            • U8G2_SH1106_128X64_NONAME_2_4W_HW_SPI(rotation, cs, dc [, reset])
            • U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI(rotation, cs, dc [, reset])
          • Software SPI (use specified pins: clock, data)
            • U8G2_SH1106_128X64_NONAME_1_4W_SW_SPI(rotation, clock, data, cs, dc [, reset])
            • U8G2_SH1106_128X64_NONAME_2_4W_SW_SPI(rotation, clock, data, cs, dc [, reset])
            • U8G2_SH1106_128X64_NONAME_F_4W_SW_SPI(rotation, clock, data, cs, dc [, reset])
          • Modes
            • mode
              pros
              cons
              constructor
              example
              page buffer (picture loop)
              • all graphics
              • llittle RAM
              • slow
              1
              void setup(void) {
                u8g2.begin();
              }

              void loop(void) {
                u8g2.firstPage();
                do {
                  u8g2.setFont(u8g2_font_ncenB14_tr);
                  u8g2.drawStr(0,24,"Hello World!");
                } while ( u8g2.nextPage() );
              }
              u8x8 character
              • fast
              • no RAM
              • no graphics
              • no all displays
              2
              void setup(void) {
                u8x8.begin();
              }

              void loop(void) {
                u8x8.setFont(u8x8_font_chroma48medium8_r);
                u8x8.drawString(0,1,"Hello World!");
              }
              full buffer
              • fast
              • all graphics
              • lot of RAM
              F
              void setup(void) {
                u8g2.begin();
              }

              void loop(void) {
                u8g2.clearBuffer();
                u8g2.setFont(u8g2_font_ncenB14_tr);
                u8g2.drawStr(0,20,"Hello World!");
                u8g2.sendBuffer();
              }
          • Example
            • Connections (4W_HW_SPI)
              • OLED
                Arduino
                GND
                GND
                VCC
                5V
                CLK
                D13
                MOSI
                D11
                RES
                D8
                DC
                D9
                CS
                D10
            • IDE: Examples / U8g2
              • uncomment:
                • U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, /* cs=*/ 10, /* dc=*/ 9, /* reset=*/ 8);
            • Basic program
              • #include <Arduino.h>
                #include <U8g2lib.h>
                #include <SPI.h>
                #include <Wire.h>

                // free choice
                #define PIN_CS 10
                #define PIN_DC 9

                #define PIN_RESET 8

                // HW => CLK=D13, MOSI=D11
                U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI u8g2(U8G2_R0, PIN_CS, PIN_DC, PIN_RESET);

                void setup(void) {
                  u8g2.begin();
                }

                void loop(void) {
                  u8g2.clearBuffer();
                  u8g2.setFont(u8g2_font_ncenB14_tr);
                  u8g2.drawStr(0,20,"Bon dia!");
                  u8g2.drawCircle(20, 40, 10);
                  u8g2.sendBuffer();
                }
            • Interfacing & displaying a custom graphic on an 0.96″ I2C OLED with Arduino
        • u8glib

Projectes / Projects

ESP

  • Info

  • datasheet any /
    year
    processor nuclis velocitat (màx) ROM SRAM SPI flash WiFi Bluetooth logic built-in sensors GPIOs ADC DAC SPI UART I2C I2S Bus CAN
    ESP8266
    2014 Tensilica LX106 single-core 80MHz 1 80MHz (160MHz)
    160kB 16MiB
    - 3.3V
    16 1 (10-bit) 2 4 3 2 2 x
    ESP32 ESP32 Series 2016 Tensilica Xtensa X36 2 160MHz (240MHz)
    512kB 16MiB x v4.2 BR/EDR + BLE 3.3V
    • hall effect
    • [temperature sensor]
    36 18 (12-bit) 2 (8-bit) 4 3 2 2 x (2.0)
    ESP32-S2



















    ESP32-C3 ESP32-C3 Series 2020 RISC-V 1 (160MHz) 384KB 400KB
    x 5.0 LE

    22 2 (12-bit) - 3 2 1 1 -
    ESP32-S3 ESP32-S3 Series


















  • RAM (s3lcd firmware)

    4M 8M 16M
    no SPIRAM
    • M5Stack Atom-S3
    • T-Dongle-S3
    quad SPIRAM
    • T-QT Pro

    • T-Embed
    • WT21-SC01 Plus
    • M5Stack CoreS3
    octal SPIRAM

    • T-Display S3
    • T-HMI
    • ESP32-S3-Box
    • ESP32-S3-Box Lite
  • WiFi setup
  • Desenvolupament / Development
    • C / C++

      • Arduino-ESP32 ESP-IDF + Arduino-ESP32 ESP-IDF (Espressif IoT Development Framework)

        Es programa com si fos un Arduino (setup+loop) Pot funcionar de totes dues maneres: setup+loop o bé app_main Només accepta app_main()
        També és el que MicroPython fa servir
        1. install
        core from
        ESP-IDF
        • Linux
          • Standard Toolchain Setup for Linux and macOS (ESP32-S3, ...)
            • mkdir -p ~/esp && cd ~/esp
            • git clone --recursive https://github.com/espressif/esp-idf.git
              • this will install master to: ~/esp/esp-idf/ (~1,9 GiB)
            • cd esp-idf
            • ./install.sh [esp32s3]
              • will create and install:
                • ~/expressif/ (~2,3 GiB)
                  • idf-env.json, containing all targets (or only those specified as install.sh arguments): esp32p4, esp32c3, esp32s3, esp32c5, esp32c2, esp32c6, esp32h2, esp32, esp32s2, esp32c61
                  • dist/
                    • tar versions to be installed in tools/
                  • tools/
                    • xtensa-esp-elf-gdb/
                    • riscv32-esp-elf-gdb/
                    • xtensa-esp-elf/
                    • riscv32-esp-elf/
                    • esp32ulp-elf/
                    • openocd-esp32/
                    • esp-rom-elfs/
                  • python_env/
                    • idf5.4_py3.10_env/
                      • will contain all python packages, needed by ...
              • ...
        • Eclipse Plugin
          • Espressif > Download and Configure ESP-IDF
            • Choose a directory to download ESP-IDF to: ~/esp/
              • this will install to: ~/esp/esp-idf-v5.0/
            • or: Use an existing ESP-IDF directory from file system
              • Choose existing ESP-IDF directory: ~/esp/esp-idf/
        • VSCode Extension
        • Espressif IDE
        2. install
        tools from


        • Linux
          • cd ~/esp/esp-idf/
          • ./install.sh all
            • will install tools to: ~/.espressif/
        • Eclipse
          • installed automatically after installing ESP-IDF, or
          • Espressif > ESP-IDF Tools Manager > Install Tools
            • ESP-IDF Directory: ~/esp/esp-idf-v5.0/
              • will install tools to: ~/.espressif/
        main myproject.ino (C++)
        • void setup(){
            Serial.begin(115200);
            while(!Serial){
              ; // wait for serial port to connect
            }
          }

          void loop(){
              Serial.println("loop");
              delay(1000);
          }
        (Autostart Arduino setup and loop on boot: off)
        main.c or main.cpp
        • #include "Arduino.h"

          extern "C" void app_main()
          {
            initArduino();

            // Arduino-like setup()
            Serial.begin(115200);
            while(!Serial){
              ; // wait for serial port to connect
            }

            // Arduino-like loop()
            while(true){
              Serial.println("loop");
            }

            // WARNING: if program reaches end of function app_main() the MCU will restart.
          }
        (Autostart Arduino setup and loop on boot: on)
        main.cpp
        • #include "Arduino.h"

          void setup(){
            Serial.begin(115200);
            while(!Serial){
              ; // wait for serial port to connect
            }
          }

          void loop(){
              Serial.println("loop");
              delay(1000);
          }
        my_project.c (automatically created by idf.py create-project)
        • #include <stdio.h>

          void app_main(void)
          {

          }
        3. setup variables

          • . $HOME/esp/esp-idf/export.sh
            • will set, for the present terminal:
              • IDF_PATH=~/esp/esp-idf
              • expand PATH with tools (e.g. idf.py)
        • Eclipse
          • Espressif > Download and Configure ESP-IDF
            • will set:
              • Preferences > C/C++ > Build > Environment
                • IDF_PATH
                • IDF_PYTHON_ENV_PATH
                • ...
        4. new project

        • CLI (Step 5. First Steps on ESP-IDF)
          • cd ~/esp
          • from example
            • cp -r $IDF_PATH/examples/get-started/hello_world .
            • cd ~/esp/hello_world
          • brand new:
            • idf.py create-project my_project
        • Eclipse
          • Window > Perspective > Reset Perspective...
          • File > New > Espressif IDF Project
        5. build and
        flash project


        • CLI
          • cd ~/esp/my_project
          • idf.py set-target esp32s3
          • idf.py menuconfig
            • to set WiFi SSIFD and credentials:
              • ...
          • idf.py build
          • idf.py -p /dev/ttyACM0 flash
        • Eclipse
          • Build
          • Run
        6. monitor project

        • CLI
          • idf.py -p /dev/ttyACM0 monitor
            • Ctrl+]
          • or combin flash and monitor:
            idf.py -p /dev/ttyACM0 flash monitor
        • Eclipse
          • Open a Terminal
        tutorials
        • Tutorials
          • Basic Tutorial
            • Blink.ino
              • use 38 (TFT backlight) instead of LED_BUILTIN
          • ...


        examples
        dir Arduino IDE examples
        examples dirs in .../espressif/arduino-esp32/libraries/ File > Examples > Examples for ESP32S3 Dev Module
        • TFT_eSPI
          • ...
        ~/Arduino/libraries/ File > Examples > Examples from Custom Libraries
        ~/Arduino/T-Display-S3/example/ File > Sketchbook > T-Display-S3

      • IDE
        • Arduino IDE: ESP32
        • Platform IO
        • ESP-IDF (Espressif IoT Development Framework)
          • ESP-IDF Programming Guide
          • Plugins for IDE
            • idf-eclipse-plugin
              • Installation
                1. Eclipse plugin
                  • Help -> Install New Software -> Add...
                    • Name: Espressif IDF Plugin for Eclipse
                    • Location: https://dl.espressif.com/dl/idf-eclipse-plugin/updates/latest/
                2. ESP-IDF
                  • Espressif (entre Run i Window) -> ESP-IDF Manager -> (top right button) Add ESP-IDF
                    • (primera vegada) Choose a directory to download ESP-IDF to: /home/.../esp/
                      • this will install to: ~/esp/esp-idf-v5.0/
                    • (si ja el teniu) Use an existing ESP-IDF directory from file system
                      • Choose existing ESP-IDF directory: /home/.../esp/esp-idf/
                  • Install Tools
                    • this will install, in ~/.espressif/
                      • dist/
                        • riscv32-esp-elf-gdb-...
                        • clang-esp-...
                        • cmake-...
                        • ninja-linux-...
                        • qemu-xtensa-softmmu-esp_develop_...
                      • tools/
                        • riscv32-esp-elf-gdb/
                        • esp-clang/
                        • cmake/
                        • ninja/
                        • qemu-xtensa/
                    • automatically done. If not:
                    • Installing ESP-IDF Tools
                    • Problems / Problemes
                      • Copying File: /home/.../.espressif/tools/openocd-esp32/v0.12.0-esp32-20240726/openocd-esp32/bin/../share/openocd/contrib/60-openocd.rules to destination: /etc/udev/rules.d/60-openocd.rules
                        Unable to copy rules for OpenOCD to system directory, try running the eclipse with sudo command
                        • Solució / Solution
                          • sudo cp /home/.../.espressif/tools/openocd-esp32/v0.12.0-esp32-20240726/openocd-esp32/bin/../share/openocd/contrib/60-openocd.rules /etc/udev/rules.d/60-openocd.rules
              • Ús / Usage
                • open C/C++ perspective
                • Window -> Perspective -> Reset perspective...
                • Create a new project
                  • File -> New -> Espressif IDF Project
                • New Launch Target: ESP Target
                  • Name: mytarget_esp32s3
                  • IDF Target: esp32s3
                  • Serial Port: /dev/ttyACM0
                • Serial console
                  • (top icon) Open a Terminal (Shift+Ctrl+Alt+T)
                • Problemes / Problems
                  • IDF Eclipse plugin 2.7.0
                    Errors occurred during the build.
                    Errors running builder 'CDT Core Builder' on project 'hello_world'.
                    'int com.espressif.idf.core.build.IDFBuildConfiguration.watchProcess(java.lang.Process, org.eclipse.cdt.core.resources.IConsole)'
      • Exemples
        • WiFi
          • fixed
            • #include <WiFi.h>
              const char* ssid = "xxxxxxxxxx";
              const char* password = "xxxxxxxxxx";

              void setup(void) {
                Serial.begin(115200);

                WiFi.begin(ssid, password);
                while (WiFi.status() != WL_CONNECTED) {
                  delay(500);
                  Serial.print(".");
                }
                Serial.println(""); 
                Serial.println("Connected");
                Serial.println(WiFi.localIP());
              }
          • SmartConfig
            • ...
    • MicroPython
      • Info
      • Instal·lació / Installation
        1. Install ESP-IDF
          • Linux
            • Install ESP-IDF
            • checkout v5.0.2
              • cd esp-idf
              • git checkout v5.0.2
              • git submodule update --init --recursive
            • Install
              • chmod +x install.sh
              • ./install.sh
              • this will install needed pip packages in ~/.espressif/python_env/idf5...
            • ...
        2. Build the firmware or get it
          • project
            drivers info last modified built firmware build (e.g. for T-Display S3) install firmware
            install libs (thonny: upload to /) tft examples





            General instructions:
            1. install ESP-IDF SDK
            2. clone micropython repo
            3. clone driver repo
            4. update the git submodules and compile the MicroPython cross-compiler (generate mpy files)
            5. copy py files to be included in the firmware as frozen
            6. build micropython firmware



            micropython -



            MicroPython port to the ESP32
            1. Install ESP-IDF SDK
              1. versions
                micropython esp-idf
                master v5.0.2
                v1.20.0 v4.4.5
                v1.19.0
              2. first time
                1. cd ~/src
                2. git clone -b v5.0.2 --recursive https://github.com/espressif/esp-idf.git
                3. cd ~/src/esp-idf
              3. next times
                1. cd ~/src/esp-idf
                2. git checkout v5.0.2
                3. git submodule update --init --recursive
              4. only once: ./install.sh
              5. every session: source export.sh
            2. clone micropython repo
              1. cd ~/src
              2. git clone https://github.com/micropython/micropython.git
            3. pre-compile some of the built-in scripts to bytecode
              1. cd ~src/micropython
              2. make -C mpy-cross
            4. build micropython firmware (e.g. for board esp32-s3)
              1. cd ~src/micropython
              2. cd ports/esp32
              3. make submodules
              4. make BOARD=GENERIC_S3
                • make idf.py
                  BOARD=GENERIC_S3
                  • -D MICROPY_BOARD=GENERIC_S3
                  • -D MICROPY_BOARD_DIR=.../micropython/ports/esp32/boards/GENERIC_S3
                  • -B build-GENERIC_S3
                  USER_C_MODULES=.../micropython.cmake
                  • -D USER_C_MODULES=.../micropython.cmake
                  FROZEN_MANIFEST=...
                  • -D MICROPY_FROZEN_MANIFEST=...
                  (removed from v1.18)
                  FROZEN_MPY_DIR=

              5. ...
            1. poseu el dispositiu en mode bootloader / put device in bootloader mode
            2. seguiu les instruccions que es mostren quan ha acabat de compilar / follow the instructions printed after build is complete:
              • susbtituïu / replace -p (PORT) per / by -p /dev/ttyACM0)
            3. reset amb el botó físic / reset with physical button
            4. verifiqueu amb / verify with
              • miniterm.py
              • ampy -p /dev/ttyACM0 ls --recursive
              • ...


            lbuque / micropython-builder
            • extmod/
              • display/
                • lcd
                • st7789
                • framebuf1
                • ...



            1. Dependències / Dependencies
              • Mageia
                • sudo dnf install git make python3 python3-pip cmake quilt
            2. cd ~/src
            3. git clone https://github.com/lbuque/micropython-builder.git
            4. cd micropython-builder
            5. ln -s config_T-DisplayS3 config
            6. make
              • board dirs will be created at:
                • /disc/src/micropython-builder/target/esp32s3/boards/
                  • LILYGO_T-DisplayS3/
                  • ...
              • micropython git submodule is automatically installed to:
                • micropython-builder/build_dir/esp32s3/micropython/
              • micropython build is called (from /disc/src/micropython-builder/build_dir/esp32s3/micropython/ports/esp32) with:
                • idf.py -D MICROPY_BOARD=LILYGO_T-DisplayS3 -B /disc/src/micropython-builder/build_dir/esp32s3/build-LILYGO_T-DisplayS3 -DUSER_C_MODULES=/disc/src/micropython-builder/extmod/micropython.cmake -D EXTMOD_FROZEN_DIR=/disc/src/micropython-builder/extmod -D MICROPY_BOARD_DIR=/disc/src/micropython-builder/target/esp32s3/boards/LILYGO_T-DisplayS3 build
            1. put device in bootloader mode
            2. cd build_dir/esp32s3/build-LILYGO_T-DisplayS3/esp-idf/esptool_py
            3. ~/.espressif/python_env/idf4.4_py3.8_env/bin/python ../../../esp-idf/components/esptool_py/esptool/esptool.py -p /dev/ttyACM0 erase_flash
            4. seguiu les instruccions que es mostren quan ha acabat de compilar / follow the instructions printed after build is complete: 
              • susbtituïu / replace -p (PORT) per / by -p /dev/ttyACM0)
            5. reset amb el botó físic / reset with physical button
            6. miniterm /dev/ttyACM0 115200
              • CTRL-D
              • MicroPython v1.19-dirty on 2023-08-09; LILYGO T-DisplayS3 with ESP32S3
            (firmware in: micropython-builder/build_dir/esp32s3/build-LILYGO_T-DisplayS3/firmware.bin)
            • ...
            • micropython-builder/
              • build_dir/esp32s3/
                • lcd_binding_micropython/examples
                  • (ok)
                • st7789/examples/
                  • ProblemesImportError: no module named 'st7789'




            1. install ESP-IDF sdk
            2. clone micropython repo
            3. clone st7789 repo
              • cd ~/src
              • git clone https://github.com/devbis/st7789_mpy.git
            4. ERROR: només hi ha st7789_mpy/st7789/micropython.mk; no micropython.cmake


            • toto.py
              • import st7789

            • based on devbis/st7789_mpy
            • added features
            2024/06/09



            • toto.py
              • import st7789

            • based on devbis/st7789_mpy
            • support
              • 320x240, 240x240, 135x240, 182x128
              • RGB and BGR color orders
              • display rotation
              • hardware based scrolling
              • ...
            2024/08/05



            • toto.py
              • import st7789py as st7789
            -
            • see russhughes/s3lcd for a much faster version
            2024/03/20
            1. install ESP-IDF sdk
              1. first time
                1. cd ~/src
                2. git clone -b v4.4 --recursive https://github.com/espressif/esp-idf.git
                3. git clone -b v5.0.2 --recursive https://github.com/espressif/esp-idf.git
                4. cd esp-idf/
                5. git pull
              2. next times
                1. cd ~/src/esp-idf/
                2. git checkout v4.4
                3. git checkout v5.0.2
                4. git submodule update --init --recursive
              3. ./install.sh
              4. source export.sh
            2. clone micropython repo
              1. cd ~/src
              2. git clone https://github.com/micropython/micropython.git
            3. clone st7789 driver repo
              1. cd ~/src
              2. git clone https://github.com/russhughes/st7789s3_mpy.git
            4. Update the git submodules and compile the MicroPython cross-compiler (generate mpy files):
              1. cd ~/src/micropython
              2. git submodule update --init
                • will update sumbmodules in micropython/lib/
              3. cd mpy-cross/
              4. make
              5. cd ..
              6. cd ports/esp32
            5. copy py files to be included in the firmware as frozen:
              1. cp ../../../st7789s3_mpy/fonts/bitmap/vga1_16x16.py modules
              2. cp ../../../st7789s3_mpy/fonts/truetype/NotoSans_32.py modules
              3. cp ../../../st7789s3_mpy/fonts/vector/scripts.py modules
            6. build micropython firmware
              1. cd ports/esp32
              2. make USER_C_MODULES=../../../st7789s3_mpy/st7789/micropython.cmake FROZEN_MANIFEST="" FROZEN_MPY_DIR=$UPYDIR/modules
              3. ...
            7. ...

            1. poseu el dispositiu en mode bootloader / put device in bootloader mode
            2. firmware
              • provided firmware
                • cd s3lcd/firmware/
                • T-Display S3
                  • source ~/.espressif/python_env/idf5.0_py3.8_env/bin/activate
                  • esptool.py --port /dev/ttyACM0 erase_flash
                  • esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x000 firmware.bin
                  • reset button
                  • miniterm.py /dev/ttyACM0 115200
                    • CTRL-D
                    • MicroPython v1.19.1-896-g2e4dda3c2-dirty on 2023-02-26; ESP32S3 module (spiram) with ESP32S3
              • built firmware
                • ...
            3. ...
            • st7789s3_mpy/
              • examples/
                • tft_config.py
                • tft_buttons.py
            • toto.py
              • import st7789
              • import tft_config
            -
            • faster than st7789s3_mpy
            • work in progress
            • based on devbis/st7789_mpy
            • added features
            2024/03/20
            1. install ESP-IDF sdk (v4.4.5) and source export:
              • source /disc/src/esp-idf/export.sh
            2. clone micropython repo (v1.20.0)
            3. clone s3lcd driver repo
              1. cd ~/src
              2. git clone https://github.com/russhughes/s3lcd.git
            4. Update the micropython git submodules and compile the MicroPython cross-compiler:
              1. cd ~/src/micropython
              2. git submodule update --init
                • will update sumbmodules in micropython/lib/
              3. cd mpy-cross/
              4. make
              5. cd ..
              6. cd ports/esp32
            5. copy py files to be included in the firmware as frozen:
              1. cd ports/esp32/modules
              2. fonts
                • bitmap
                  • ln -s ../../../../s3lcd/fonts/bitmap/vga1* .
                  • ln -s ../../../../s3lcd/fonts/bitmap/vga2* .
                • truetype
                • vector
            6. build micropython firmware (for T-Display S3: GENERIC_S3_SPIRAM_OCT):
              1. cd ports/esp32
              2. make BOARD=GENERIC_S3_SPIRAM_OCT USER_C_MODULES=/disc/src/s3lcd/src/micropython.cmake FROZEN_MANIFEST="" FROZEN_MPY_DIR=$UPYDIR/modules
                • specifying a relative path in USER_C_MODULES does not work

            1. poseu el dispositiu en mode bootloader / put device in bootloader mode
            2. firmware
              • provided firmware
                • cd s3lcd/firmware/
                • T-Display S3
                  • source ~/.espressif/python_env/idf5.0_py3.8_env/bin/activate
                  • cd S3LCD_OCT_16M
                  • esptool.py --port /dev/ttyACM0 erase_flash
                  • esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x000 firmware.bin
                  • miniterm.py  /dev/ttyACM0 115200
                    • CTRL-D
                    • MicroPython v1.20.0-dirty on 2023-05-14; ESP32S3 (S3LCD_OCT_16M) with ESP32S3
              • built firmware (see previous column):
                • seguiu les instruccions que es mostren quan ha acabat de compilar / follow the instructions printed after build is complete: 
                  • susbtituïu / replace -p (PORT) per / by -p /dev/ttyACM0)
            • s3lcd/firmware/S3LCD_OCT_16M/firmware.bin
            • s3lcd/
              • examples/
            • s3lcd/
            • toto.py
              • import s3lcd
              • import tft_config
            lv_micropython
            (forked from micropython)




            1. Install ESP-IDF SDK v4.4.5
              1. versions
                lv_micropython esp-idf

                v4.4.5


              2. first time
                1. cd ~/src
                2. git clone -b v4.4.5 --recursive https://github.com/espressif/esp-idf.git
                3. cd ~/src/esp-idf
              3. next times
                1. cd ~/src/esp-idf
                2. git checkout v4.4.5
                3. git submodule update --init --recursive
              4. only once: ./install.sh
              5. every session: source export.sh
            2. clone lv_micropython repo
              1. cd ~/src
              2. git clone https://github.com/lvgl/lv_micropython.git
              3. cd lv_micropython
              4. git submodule update --init --recursive lib/lv_bindings
            3. pre-compile some of the built-in scripts to bytecode
              1. cd ~src/lv_micropython
              2. make -C mpy-cross
            4. build micropython firmware
              1. cd ~src/lv_micropython
              2. cd ports/esp32
              3. make submodules
              4. make



          • Lilygo
            • lbuque/micropython-builder
              • Compilació / Compilation
                • cd ~/src
                • git clone https://github.com/lbuque/micropython-builder.git
                • cd micropython-builder
                • T-DisplayS3
                  • ln -s config_T-DisplayS3 config
                • make
              • Instal·lació / Installation
                • cd micropython-builder/build_dir/esp32s3/build-LILYGO_T-DisplayS3/esp-idf/esptool_py
                • poseu el dispositiu en mode bootloader
                • ~/.espressif/python_env/idf4.4_py3.8_env/bin/python ../../../esp-idf/components/esptool_py/esptool/esptool.py -p /dev/ttyACM0 erase_flash
                • Project build complete. To flash, run this command:
                  ~/.espressif/python_env/idf4.4_py3.8_env/bin/python ../../../esp-idf/components/esptool_py/esptool/esptool.py -p
                  /dev/ttyACM0 -b 460800 --before default_reset --after no_reset --chip esp32s3  write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x0 ../../../build-LILYGO_T-DisplayS3/bootloader/bootloader.bin 0x8000 ../../../build-LILYGO_T-DisplayS3/partition_table/partition-table.bin 0x10000 ../../../build-LILYGO_T-DisplayS3/micropython.bin
                  • Problemes / Problems
                    • The filesystem appears to be corrupted. If you had important data there, you
                      may want to make a flash snapshot to try to recover it. Otherwise, perform
                      factory reprogramming of MicroPython firmware (completely erase flash, followed
                      by firmware programming).
                    • Solució / Solution
                      • Perform a previous erase_flash
              • ...
            • lilygo-micropython
              • IMPORTANT: use lbuque/micropython-builder instead
              • T-DisplayS3
                • Dependències / Dependencies
                  • Mageia
                    • sudo dnf install git make python3 python3-pip cmake quilt
                • cd ~/src
                • git clone https://github.com/Xinyuan-LilyGO/lilygo-micropython.git
                • cd lilygo-micropython
                • cp config_T-DisplayS3 config
                • make
                • ...
                • Problemes / Problems
                  • CMake Error at /home/.../src/lilygo-micropython/extmod/display/lcd/src/micropython.cmake:3 (include):
                      include could not find load file:

                        /home/.../src/lilygo-micropython/build_dir/esp32s3/build-LILYGO_T-DisplayS3/../lcd_binding_micropython/lcd/micropython.cmake
                    • degut a:
                      • make[1]: entering dir '/home/.../src/lilygo-micropython/extmod/display/lcd'
                        Download lcd_binding_micropython-59bbbdae5ecc9ae84b986ce54c089250a13cb768.tar.gz over git
                        S'està clonant a «lcd_binding_micropython»...
                        remote: Enumerating objects: 531, done.
                        remote: Counting objects: 100% (9/9), done.
                        remote: Compressing objects: 100% (4/4), done.
                        remote: Total 531 (delta 5), reused 5 (delta 5), pack-reused 522
                        S'estan rebent objectes: 100% (531/531), 324.27 KiB | 1.72 MiB/s, fet.
                        S'estan resolent les diferències: 100% (272/272), fet.
                        fatal: la referència no és un arbre: 59bbbdae5ecc9ae84b986ce54c089250a13cb768
                      • perquè
                        • cd ~/src/lilygo-micropython/tmp/dl/lcd_binding_micropython
                        • git checkout 59bbbdae5ecc9ae84b986ce54c089250a13cb768
                          fatal: la referència no és un arbre: 59bbbdae5ecc9ae84b986ce54c089250a13cb768
                    • Solució / Solution:
                  • ...
            • st7789s3_mpy: MicroPython driver for the TTGO T-Display-S3 st7789 display
              • cd ~/src/
              • git clone https://github.com/russhughes/st7789s3_mpy.git
            • s3lcd: ESP_LCD MicroPython driver for ESP32-S3 Devices with ST7789 or compatible displays.
              • faster than st7789s3_mpy
              • beta
              • cd ~/src/
              • git clone https://github.com/russhughes/s3lcd.git
              • Supplied firmware
                • cd s3lcd/firmware/
                  • T-Display S3
                    • source ~/.espressif/python_env/idf5.0_py3.8_env/bin/activate
                    • cd S3LCD_OCT_16M
                    • esptool.py --port /dev/ttyACM0 erase_flash
                    • esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x000 firmware.bin
          • LVGL
            • lv_micropython (forked from micropython)
              • Dependències / Dependencies
                • Mageia
                  • ...
              • Instal·lació
                • cd ~/src
                • git clone ...
                • ...
          • ...
        3. Pujada del microprogramari cap al dispositiu / Upload firmware to device
          • engegueu el dispositiu en mode bootloader:
            1. lsusb en mode normal:
              • ID 303a:4001 Espressif Systems Espressif Device
            2. premeu reset + botó del costat
            3. deixeu anar reset
            4. deixeu anar el botó del costat
            5. comproveu amb lsusb que el dispositiu ara està en mode bootloader
              • ID 303a:1001 Espressif USB JTAG/serial debug unit
          • si heu compilat el microprogramari
            • idf.py build
            • idf.py -D MICROPY_BOARD=GENERIC_SPIRAM build
            • idf.py flash
          • si l'heu baixat ja compilat:
            • source ~/.espressif/python_env/idf5.0_py3.8_env/bin/activate
            • cd ...
            • esptool.py --port /dev/ttyACM0 erase_flash
            • esptool.py --chip esp32s3 --port /dev/ttyACM0 write_flash -z 0x000 firmware.bin
          • ...
        4. Verificació de la comunicació via port sèrie
          • source ~/.espressif/python_env/idf5.0_py3.*_env/bin/activate
          • miniterm.py /dev/ttyACM0 115200
            • ENTER
            • help()
            • soft reboot: CTRL+D
            • to exit: CTRL+]
        5. ...
      • IDE
        • Thonny
          • Tools -> Options
            • ...
          • View -> Files
            • From This Computer
              • select file s3lcd/examples/configs/t-display-s3/tft_config.py
              • Upload to /
      • Eines / Tools
        • rshell (Remote MicroPython Shell)
          • Instal·lació / Installation
            • pip install rshell
          • Ús / Usage
            • rshell -p /dev/ttyACM0
              • ls -l /pyboard
              • repl
                • CTRL+X to exit
              • ...
      • Exemples / Examples
        • shelly-fpm / shelly-python
        • How To Run A Program At Boot
        • lbuque/lcd_binding_micropython examples
        • russhughes/st7789s3_mpy examples
        • russhughes/s3lcd examples
        • WiFi
          • Configuring the WiFi and using the board
          • rtc via ntp
            • import network
              from machine import RTC
              from ntptime import settime

              def wlan_connect(ssid='MYSSID', password='MYPASSWORD'):
                  wlan = network.WLAN(network.STA_IF)
                  if not wlan.active() or not wlan.isconnected():
                      wlan.active(True)
                      print('connecting to:', ssid)
                      try:
                          wlan.connect(ssid, password)
                      except Exception as e:
                          print(e)
                      while not wlan.isconnected():
                          pass
                  print('network config:', wlan.ifconfig())
                 
              def main():
                  # connect to WLAN
                  wlan_connect()
                 
                  # real-time clock
                  rtc = RTC()
                 
                  # set time from NTP
                  settime()

                  # year, month, day, weekday, hours, minutes, seconds, subseconds
                  print("{}".format(rtc.datetime()))
                 
              main()
          • ...
        • Gràfics / Graphics
          • TFT
            • min_tft.py
              • import vga1_bold_16x32 as font
                import tft_config
                import s3lcd

                def main():
                    try:
                        tft = tft_config.config(tft_config.WIDE)
                        tft.init()

                        text = "toto"
                        xpos = 20
                        ypos = 100
                        fg = s3lcd.WHITE
                        bg = s3lcd.BLACK
                        tft.text(font, text, xpos, ypos, fg, bg)
                        tft.show()

                    finally:
                        tft.deinit()

                main()
            • ntp_tft.py
              • ...
          • LVGL
        • Processos
        • Projectes
        • ...
      • ...
  • ...
  • ESP8266
    • ...
  • ESP32
  • ...

MicroPython

Mòduls / Modules

...
família tipus model interfície /
interface
biblioteques / libraries projectes
entrada sensor distància HC-SR04



sensor de moviment PIR HC-SR501



sensor de temperatura AM2302 (DHT22)

acceleròmetre MMA7361



ECG AD8232



rellotge RTC DS3231



rotary encoder Octopus OBEncoder


sortida relé 5v



motors L298N


pantalla LCD 16x2 LCM1602 IIC V1 I2C

OLED 1.3" SSH1106 (128x64) SPI
comunicació bluetooth HC-06


http://www.francescpinyol.cat/arduino.html
Primera versió: / First version: 29.XII.2017
Darrera modificació: 1 de setembre de 2024 / Last update: 1st September 2024

Valid HTML 4.01!

Cap a casa / Back home