# Desarrollo hardware ## Arduino IDE Bajamos los paquetes de la página [web](https://www.arduino.cc), descomprimimimos en _~/apps/arduino_. La distribución del IDE incluye ahora un fichero `install.sh`que se encarga de hacer la integración del IDE en los menús de Linux. Además también incluye un script (`arduino-linux-setup.sh`) para crear las _devrules_ y que además desinstala el driver _modemmanager_ y crea grupos nuevos en el sistema si no existen. No tengo claro lo de desinstalar el driver así que comentamos la sección que borra el _modemmanager_ del fichero `arduino-linux-setup.sh` y lo ejecutamos para que instale el resto. Yo añado el fichero 99-arduino.rules que se encarga de inhibir el modemmanager para que no capture al CircuitPlayground Express: ```bash # for arduino brand, stop ModemManager grabbing port ATTRS{idVendor}=="2a03", ENV{ID_MM_DEVICE_IGNORE}="1" # for sparkfun brand, stop ModemManager grabbing port ATTRS{idVendor}=="1b4f", ENV{ID_MM_DEVICE_IGNORE}="1" ``` Después de añadir ficheros de reglas podemos recargar las reglas ejecutando: `udevadm control --reload-rules && udevadm trigger` Tenemos que crear los ficheros `.desktop`. ### Arduino IDE 2 Descargamos el fichero _appmimage_ de la página de Arduino y creamos el fichero `.desktop`. ### Añadir soporte para _Feather M0_ Arrancamos el IDE Arduino y en la opción de _Preferences::Aditional Board Managers URLs_ añadimos la dirección `https://adafruit.github.io/arduino-board-index/package_adafruit_index.json`, si tenemos otras URL, simplemente añadimos esta separada por una coma. Ahora desde el _Board Manager_ instalamos: * Arduino SAMD Boards * Adafruit SAMD Boards ### Añadir soporte para _Circuit Playground Express_ Bastaría con instalar _Arduino SAMD Boards_ ### Añadir soporte para STM32 Tenemos varias URL posibles para configurar en las preferencias del IDE Arduino: * (esta deber ser la oficial) Pero la oficial no da soporte para usar el _st-link_, necesitamos añadir alguna más. * (recomendada por Tutoelectro, nos da soporte para el st-link) --------------------------------------------- __NOTA__: Hasta donde yo se la de arriba es la única URL que permite usar el st-link --------------------------------------------- He optado por añadir los dos ficheros json al IDE, la oficial tiene buena pinta pero parece que no soporta st-link. Con la otra podremos usarlo sin problemas. Instalamos la biblioteca `stm32 cores` que corresponde al origen de software oficial y la biblioteca `STM32F1xx/GD32F1xx`, esta última es la que nos dará soporte explícito para el st-link Lo probamos con el _Blink_ y funciona perfectamente con las opciones de la [Figura 1](#figura_1) ![Opciones Arduino para STM32 con st-link](src/img/stm32_arduino_opts.jpg "Menu Arduino desplegado"){#figura_1 width=30% } ### Añadir soporte para ESP32 y ESP8266 Añadimos las URL: * (soporte para ESP32) * (soporte para ESP8266) Añadimos la librería: * ESP32 (de espressif) ### Añadir biblioteca de soporte para Makeblock ------------------------------------------------------------------------------- __Nota__: Pendiente de instalar ------------------------------------------------------------------------------- Clonamos el [repo oficial en github](https://github.com/Makeblock-official/Makeblock-Libraries). Una vez que descarguemos las librerias es necesario copiar el directorio `Makeblock-Libraries/makeblock` en nuestro directorio de bibliotecas de Arduino. En mi caso `~/Arduino/libraries/`. Una vez instaladas las bibliotecas es necesario reiniciar el IDE Arduino si estaba arrancado. Podemos ver si se ha instalado correctamente simplemente echando un ojo al menú de ejemplos en el IDE, tendríamos que ver los ejemplos de _Makeblock_. Un detalle importante para programar el Auriga-Me es necesario seleccionar el micro Arduino Mega 2560 en el IDE Arduino. ## Pinguino IDE ------------------------------------------------------------------------------- __Nota__: Pendiente de instalar ------------------------------------------------------------------------------- Tenemos el paquete de instalación disponible en su página [web](http://pinguino.cc/download.php) Ejecutamos el programa de instalación. El programa descargará los paquetes Debian necesarios para dejar el IDE y los compiladores instalados. Al acabar la instalación he tenido que crear el directorio _~/Pinguino/v11_, parece que hay algún problema con el programa de instalación y no lo crea automáticamente. El programa queda correctamente instalado en _/opt_ y arranca correctamente, habrá que probarlo con los micros. ## stm32 cubeide Nos bajamos el instalador genérico. Tendremos que: * aceptar un montón de acuerdos de licencias * indicarle un directorio de instalación (en mi caso `~/apps/st/st/stm32cubeide_1.4.0`) * darle la password de root para instalar ficheros de udev, concretamente: * `udev/rules.d/49-stlinkv1.rules` * `udev/rules.d/49-stlinkv2-1.rules` * `udev/rules.d/49-stlinkv2.rules` * `udev/rules.d/49-stlinkv3.rules` * `udev/rules.d/99-jlink.rules` ## esp-idf ------------------------------------------ __MUY IMPORTANTE__ es más fácil instalar el esp-idf a través de _Platformio_ pero dejo las instrucciones de instalación que usé en su dia como referencia. ------------------------------------------ Instalamos las dependencias (cmake ya lo tenemos instalado) ---------------------------------------------------------------------- __NOTA__: No es necesario instalar los paquetes de python que nos especifican en las instrucciones de instalación del _esp-idf_, se instalarán automáticamente en el siguiente paso. ---------------------------------------------------------------------- ~~~~bash sudo apt-get install gperf cmake ninja-build ccache libffi-dev libssl-dev ~~~~ Ahora creamos un directorio para nuestro _tool-chain_: ~~~~bash mkdir ~/esp cd ~/esp git clone --recursive https://github.com/espressif/esp-idf ~~~~ También es necesario que nuestro usuario pertenezca al grupo `dialout`, pero eso ya deberíamos tenerlo hecho de antes. Una vez clonado el repo ejecutamos el script de instalación ~~~~bash cd ~/esp/esp-idf ./install.sh ~~~~ Este script nos va a dejar instaladas todas las herramientas necesarias en el directorio `~/.expressif` **Nota**: para que funcione correctamente en Linux Mint es necesario que el script `tools/idf_tools.py` apunte al python3 de nuestro sistema. Basta con editar la primera linea _shebang_ del script. Estas son las bibliotecas que deja instaladas: ~~~~bash Installing ESP-IDF tools Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32 ~~~~ Para empezar a trabajar bastará con hacer un _source_ del fichero `~/apps/esp/esp-idf/export.sh`: ~~~~bash . ~/apps/esp/esp-idf/export.sh ~~~~ ## KiCAD En la [página web del proyecto](http://kicad-pcb.org/download/linux-mint/) nos recomiendan el ppa a usar para instalar la última versión estable: ~~~~ sudo add-apt-repository --yes ppa:kicad/kicad-5.1-releases sudo apt-get update sudo apt install kicad ~~~~ Paciencia, el paquete `kicad-packages3d` tarda un buen rato en descargarse. Algunas librerías alternativas: * [Freetronics](https://github.com/freetronics/freetronics_kicad_library) una libreria que no solo incluye Shield para Arduino sino una completa colección de componentes que nos permitirá hacer proyectos completos. [Freetronics](http://www.freetronics.com) es una especie de BricoGeek australiano, publica tutoriales, vende componentes, y al parecer mantiene una biblioteca para KiCAD. La biblioteca de Freetronics se mantiene en un repo de github. Lo suyo es incorporarla a cada proyecto, por que si la actualizas se pueden romper los proyectos que estes haciendo. * [eklablog](http://meta-blog.eklablog.com/kicad-librairie-arduino-pretty-p930786) Esta biblioteca de componentes está incluida en el github de KiCAD, así que teoricamente no habría que instalarla en nuestro disco duro. ### Actualizar a KiCAD 6.0 Hacemos un `sudo apt purge` de todos los paquetes del antiguo KiCAD. Desactivamos el antiguo repo y ejecutamos: ```bash sudo add-apt-repository --yes ppa:kicad/kicad-6.0-releases sudo apt update sudo apt install --install-recommends kicad # If you want demo projects # sudo apt install kicad-demos ``` No hay `demos` de momento en el nuevo KiCAD 6.0 ### Actualizar a KiCAD 7 ```bash sudo add-apt-repository --yes ppa:kicad/kicad-7.0-releases sudo apt update sudo apt install --install-recommends kicad ``` ## Wireviz Una herramienta para documentar cableados de proyectos. Es una aplicación _Python_ que usa _Graphviz_, lo he instalado con `pipx`. ```bash pyenv global ve_sys pipx install wireviz pyenv global system ``` ## Analizador lógico Mi analizador es un OpenBench de Seedstudio, [aquí hay mas info](http://dangerousprototypes.com/docs/Open_Bench_Logic_Sniffer) ### Sigrok Instalamos __Sigrok__, simplemente desde los repos de Debian: ~~~~bash sudo aptitude install sigrok ~~~~ Al instalar __Sigrok__ instalamos también __Pulseview__. Si al conectar el analizador, echamos un ojo al fichero _syslog_ vemos que al conectarlo se mapea en un puerto tty. Si arrancamos __Pulseview__ (nuestro usuario tiene que estar incluido en el grupo _dialout_), en la opción _File::Connect to device_, escogemos la opción _Openbench_ y le pasamos el puerto. Al pulsar la opción _Scan for devices_ reconoce el analizador correctamente como un _Sump Logic Analyzer_. ### Sump logic analyzer Este es el software recomendado para usar con el analizador. Descargamos el paquete de la [página del proyecto](https://www.sump.org), o más concretamente de [esta página](https://www.sump.org/projects/analyzer/) y descomprimimos en _~/apps_. Instalamos las dependencias: ~~~~bash sudo apt install librxtx-java ~~~~ Editamos el fichero _~/apps/Logic Analyzer/client/run.sh_ y lo dejamos así: ~~~~ #!/bin/bash # java -jar analyzer.jar $* java -cp /usr/share/java/RXTXcomm.jar:analyzer.jar org.sump.analyzer.Loader ~~~~ Y ya funciona. ### OLS ------------------------------------------------------------------------------- __Nota__: Pendiente de instalar ------------------------------------------------------------------------------- [Página oficial](https://www.lxtreme.nl/ols/) ## IceStudio Instalamos dependencias con `sudo apt install xclip` Bajamos el _AppImage_ desde el [github de IceStudio](https://github.com/FPGAwars/icestudio) y lo dejamos en `~/apps/icestudio` ## PlatformIO ### VS Code Añadimos el origen de software: ~~~~ curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > packages.microsoft.gpg sudo install -o root -g root -m 644 packages.microsoft.gpg /usr/share/keyrings/ sudo sh -c 'echo "deb [arch=amd64 signed-by=/usr/share/keyrings/packages.microsoft.gpg] https://packages.microsoft.com/repos/vscode stable main" > /etc/apt/sources.list.d/vscode.list' ~~~~ E instalamos ~~~~ sudo apt update sudo apt install code # alternativamente code-insiders (es como la versión beta, se pueden instalar los dos) ~~~~ Ahora 1. lanzamos el editor 2. abrimos el gestor de extensiones 3. buscamos el platformio ide 4. instalamos Seguimos las instrucciones de [aqui](https://docs.platformio.org/en/latest/ide/vscode.html#quick-start) ### Incluir platform.io CLI en el PATH Esto es una malísima idea, __NO LO HAGAS__ Las instrucciones indican que hagamos lo siguiente para usar Platformio desde linea de comandos pero no es conveniente hacerlo. Modificamos el fichero `~/.profile` añadiendo las siguientes lineas: ~~~~ if [ -d "$HOME/.platformio/penv/bin"] ; then PATH="$PATH:$HOME/.platformio/penv/bin" fi ~~~~ Si quieres usar Platformio desde linea de comandos, es mejor activar manualmente el entorno virtual con `source ~/.platformio/penv/bin/activate` ### vscodium ~~~~bash wget -qO - https://gitlab.com/paulcarroty/vscodium-deb-rpm-repo/raw/master/pub.gpg | gpg --dearmor | sudo dd of=/etc/apt/trusted.gpg.d/vscodium.gpg echo 'deb https://paulcarroty.gitlab.io/vscodium-deb-rpm-repo/debs/ vscodium main' | sudo tee --append /etc/apt/sources.list.d/vscodium.list sudo apt update && sudo apt install codium ~~~~ ## RepRap ### OpenScad El OpenSCAD está disponible en los orígenes de software, así que `sudo apt install openscad`. ### Slic3r Descargamos la estable desde la [página web](https://slic3r.org) y como de costumbre descomprimimos en `~/apps` y creamos un lanzador con _MenuLibre_ ### Slic3r Prusa Edition Una nueva versión del clásico _Slic3r_ con muchas mejoras. Descargamos la _appimage_ desde la [página web](https://www.prusa3d.com/slic3r-prusa-edition/) y ya sabeis, descomprimir en `~/apps` y dar permisos de ejecución. ### ideaMaker Una aplicación más para generar gcode con muy buena pinta, tenemos el paquete _deb_ disponible en su [página web](https://www.raise3d.com/pages/ideamaker). Instalamos con el gestor de software. ### Ultimaker Cura Descargamos el _AppImage_ desde la [página web](https://github.com/Ultimaker/Cura/releases) ### Pronterface Seguimos las instrucciones para Ubuntu Focal: Instalamos las dependencias: `sudo apt install libsdl2-dev` Clonamos el repo: ~~~~ cd ~/apps git clone https://github.com/kliment/Printrun.git cd Printrun mkvirtualenv -p /usr/bin/python3 printrun python -m pip install https://extras.wxpython.org/wxPython4/extras/linux/gtk3/ubuntu-20.04/wxPython-4.1.0-cp38-cp38-linux_x86_64.whl pip install -r requirements.txt # sudo apt-get install libdbus-glib-1-dev libdbus-1-dev ~~~~ Y ya lo tenemos todo listo para ejecutar. ## Cortadora de vinilos ### Inkcut Instalado en un entorno virtual: ~~~~bash mkvirtualenv -p `which python3` inkcut sudo apt install libxml2-dev libxslt-dev libcups2-dev pip install PyQt5 pip install inkcut ~~~~ ### Plugin para inkscape Instalamos dependencias: ~~~~bash pip install python-usb ~~~~ Instalamos el fichero `.deb` desde la web ## Drone ### qgroundcontrol Descargamos [el appimage](https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage) ### missionplanner Para usar *Mission Planner* en Linux Mint se recomienda instalar los paquetes: ~~~~bash sudo apt install mono-complete festival ~~~~ Descargamos el MissionPlanner desde [aquí](https://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.zip) [Descripción de la instalación](https://www.rcgroups.com/forums/showthread.php?2179591-Installing-MissionPlanner-1-3-X-on-Ubuntu-17-04) Una vez descomprimido el `zip` ejecutamos: `mono MissionPlanner.exe` ## node-red Para instalar node-red en linux necesitamos instalar primero `node.js`. Hay varias formas de instalar `node.js`, yo voy a optar por instalar `nvm` que es el **n**ode **v**ersion **m**anager. Para ello ejecutamos el siguiente comando (la versión actual de `nvm` es la 0.37.0) ```bash curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.37.0/install.sh | bash ``` El script de instalación añade las siguientes lineas al fichero `~/.bashrc`, nosotros las movemos al fichero `~/.profile` ```bash export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion ``` Para comprobar la instalación usamos `command -v nvm` que nos devolverá `nvm`. `which` no funciona en este caso por que es un script para aplicarle `source` ### Instalación de `node.js` Ahora que tenemos `nvm` instalado, ya podemos instalar fácilmente la versión o versiones que queramos de `node.js` ```bash nvm ls-remote # para listar las versiones disponibles nvm install node # instala la última versión disponible ``` ### Instalación de `mosquitto` `mosquitto` es un _mqtt broker_ muy sencillo y completo, aunque no es capaz de aguantar cargas grandes, para aprender es perfecto. ```bash sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa sudo apt-get update sudo apt install mosquitto mosquitto-clients ``` Con esto queda el servicio instalado y funcionando (`scs mosquitto` o `systemctl status mosquitto`) Si queremos el servicio parado para arrancarlo nosotros manualmente: ```bash scsp mosquitto.service scd mosquitto.service ``` Y sin alias sería: ```bash sudo systemctl stop mosquitto.service sudo systemctl disable mosquitto.service ``` Para arrancarlo cuando lo necesitemos le damos un _start_ con `scst mosquitto.service` o `sudo systemctl start mosquitto.service` ### Instalación de Influxdb Seguimos el método para ubuntu: ```bash wget -qO- https://repos.influxdata.com/influxdb.key | sudo apt-key add - #source /etc/lsb-release DISTRIB_ID=ubuntu DISTRIB_CODENAME=focal echo "deb https://repos.influxdata.com/${DISTRIB_ID} ${DISTRIB_CODENAME} stable" | sudo tee /etc/apt/sources.list.d/influxdb.list apt update apt install influxdb apt install telegraf ``` ### Instalación de `node-red` Una vez instalado el `node.js` instalar el `node-red` es muy fácil ```bash nvm use node npm install -g --unsafe-perm node-red ```