Programando e simulando u-blox NINA-W106 com NuttX/WOKWI
O objetivo deste BLOG é demonstrar como é possível utilizar o NuttX para programação do NINA W106, abrindo um terminal para interagir com o NuttX, sem APP e então comparado a execução em uma ferramenta de Simulação WOKWI.
SMARTCORE
A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS/GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br
NuttX
NuttX: O sistema operacional para a Internet das Coisas.
NuttX é um sistema operacional em tempo real (RTOS) com ênfase na conformidade de padrões e pequeno footprint. Escaláveis de ambientes microcontroladores de 8 bits a 32 bits, os principais padrões de governo em NuttX são os padrões Posix e ANSI. ApIs padrão adicionais do Unix e de outros RTOS comuns (como o VxWorks) são adotadas para funcionalidades não disponíveis sob esses padrões, ou para funcionalidades que não são apropriadas para ambientes profundamente incorporados (como fork()).
A NuttX se esforça para alcançar um alto grau de conformidade de padrões. As principais normas de governo são as normas POSIX e ANSI. ApIs padrão adicionais do Unix e de outros RTOS comuns são adotadas para funcionalidades não disponíveis sob esses padrões ou para funcionalidades que não são apropriadas para os RTOS profundamente incorporados (como fork()).
Devido a essa conformidade de padrões, o software desenvolvido sob outros OSs padrão (como o Linux) deve ser portado facilmente para NuttX.
Tempo Real Totalmente preventivo; prioridade fixa, round-robin, e agendamento "esporádico".
Licença Apache não restritiva totalmente aberta.
GNU Toolchains Compatíveis com as cadeias de ferramentas GNU baseadas no buildroot disponível para download para fornecer um ambiente completo de desenvolvimento para muitas arquiteturas.
Wokwi é um simulador de eletrônica online. Você pode usá-lo para simular Arduino, U-BLOX NINA W106 (ESP32) e muitas outras placas além de componentes e sensores populares como LEDs, shift registers, Buzzer, sensores (ultrassônico, temperatura, umidade etc), Display TFT, teclados e muito mais.
Pode carregar BIN ou HEX gerados de Terceiros.
Você pode aprender programação NuTTx no simulador do U-BLOX NINA W106 onde quer que esteja. sem ter a necessidade de dispor de um Hardware real.
UBLOX NINA W106
Wi-Fi 802.11b/g/n
Dual-Mode Bluetooth v4.2
Poderoso suporte de CPU aberta para aplicativos personalizados
Tamanho pequeno e várias opções de antena
Pino compatível com outros módulos NINA
Certificação global
Super Pequena
Módulo baseado no ESP32, com 4MB FLASH
HOMOLOGADO PELA ANATEL
NINA W106 e NuttX
Como o módulo NINA W106 é baseado no chip ESP32 (CPU), será possível rodar o Nuttx sem problemas.
O link abaixo, é roteiro Básico para que você possa preparar o ambiente para programar o NINA W106 com o NuttX
Dependências
$sudo apt install \ bison flex gettext texinfo libncurses5-dev libncursesw5-dev \ gperf automake libtool pkg-config build-essential gperf genromfs \ libgmp-dev libmpc-dev libmpfr-dev libisl-dev binutils-dev libelf-dev \ libexpat-dev gcc-multilib g++-multilib picocom u-boot-tools util-linux
Nota 1: O NuttX utiliza um sistema de build semelhante ao do Kernel do Linux (https://www.kernel.org/doc/html/latest/kbuild/index.html). Ele utiliza o kconfig-frontends como seu sistema de configuração. O repositório tools.git é utilizado para instalar este pacote. Porém se você estiver usando o Ubuntu 19.10 ou mais recente, estas distribuições já contém o pacote, mas de qualquer forma, instale.$ sudo apt-get install kconfig-frontends
Nota 2: Outra dependência para o processo do NuttX com o ESP32 é o ESP-IDF (Espressif IoT Development Framework). Este framework é nativo do ESP e mantido pela Espressif. Ele compreende um conjunto de códigos como drivers, APIs, scripts, ferramental para compilar e fazer upload do firmware e o FreeRTOS customizado. Neste ponto, uma observação conceitual é muito importante, o NuttX não usa o FreeRTOS em nenhuma camada interna, apenas algumas ferramentas auxiliares que compõem o IDF serão utilizadas para geração do binário e gravação.
Download do NuttX
$ mkdir nuttx
$ cd nuttx
$ git clone https://github.com/apache/incubator-nuttx.git nuttx
$ git clone https://github.com/apache/incubator-nuttx-apps apps
O Ubuntu e o Debian ainda fornecem o Python 2.7 como o interpretador padrão, mas alguns
pacotes necessários podem estar faltando para distribuições mais recentes. Python 3 é
recomendado e pode ser instalado da seguinte maneira:
$ sudo apt-get install python3 python3-pip
python3-setuptool$sudo update-alternatives --install /usr/bin/python python /usr/bin/python3
Instale agora o ESP-IDF (ESP32 TOOLS, LIBS, ETC) manualmente
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/linux-setup.html
https://docs.espressif.com/projects/esp-idf/en/latest/esp32/get-started/index.html#get-started-get-esp-idf
osboxes@osboxes:~$ cd esp/
osboxes@osboxes:~/esp$ cd esp-idf/
osboxes@osboxes:~/esp/esp-idf$ ./install.sh
Detecting the Python interpreter
Checking "python" ...
/home/osboxes/esp/esp-idf/tools/detect_python.sh: line 16: python: command not found
Checking "python3" ...
Python 3.8.5
"python3" has been detected
Installing ESP-IDF tools
Installing tools: xtensa-esp32-elf, xtensa-esp32s2-elf, xtensa-esp32s3-elf, riscv32-esp-elf, esp32ulp-elf, esp32s2ulp-elf, openocd-esp32
Installing xtensa-esp32-elf@esp-2020r3-8.4.0
Downloading xtensa-esp32-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz to /home/osboxes/.espressif/dist/xtensa-esp32-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz.tmp
Done
Extracting /home/osboxes/.espressif/dist/xtensa-esp32-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz to /home/osboxes/.espressif/tools/xtensa-esp32-elf/esp-2020r3-8.4.0
Installing xtensa-esp32s2-elf@esp-2020r3-8.4.0
Downloading xtensa-esp32s2-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz to /home/osboxes/.espressif/dist/xtensa-esp32s2-elf-gcc8_4_0-esp-2020r3-linux-amd64.tar.gz.tmp
Done
.
.
.
$cd nuttx
$make -C tools/esp32/ ${HOME}/esp/esp-idf
Após a instalação do IDF, ou caso já possua o IDF instalado, execute oseguinte comando para ativar o ambiente virtual que foi configurado nainstalação. Sempre que for realizar o build do NuttX, será necessárioativar este ambiente.$. ${HOME}/esp/esp-idf/export.sh
No presente momento, o NuttX utiliza 2 binários gerados através doIDF: o bootloader e a tabela de partição. Ainda dentro do diretórionuttx/, faça o download destes binários pré configurados:
$ wget -O bootloader.bin https://github.com/saramonteiro/esp32_binaries_nuttx/blob/main/bootloader.bin?raw=true
$ wget -O partitions.bin https://github.com/saramonteiro/esp32_binaries_nuttx/blob/main/partitions.bin?raw=true
Mantenha-se no diretório do NuttX e execute o script de configuração para criar um arquivo de configuração para o ESP32.
$ make distclean
$ ./tools/configure.sh esp32-devkitc:nsh
Finalmente, faça o build e confirme em seguida que o firmware binário foi gerado:
$ makeEste binário não tem os cabeçalhos com as informações que o bootloader do ESP32 espera encontrar, então ele deve ser removido:
$ rm nuttx.bin
E um novo binário deverá ser gerado a partir do arquivo ELF chamado “nuttx”. Para isso, é necessário usar o script esptool.py para gerar este arquivo:
esptool.py --chip esp32 elf2image --flash_mode dio --flash_size 4mb -o ./nuttx.bin nuttx
Você pode configurar o ESP32 para rodar outros APP com
$ make menuconfig
.config - NuttX/x86_64 Configuration────────────────────────────────────────────────────────────────────────────────────┌───────────────────────── NuttX/x86_64 Configuration ──────────────────────────┐│ Arrow keys navigate the menu. <Enter> selects submenus ---> (or empty ││ submenus ----). Highlighted letters are hotkeys. Pressing <Y> includes, ││ <N> excludes, <M> modularizes features. Press <Esc><Esc> to exit, <?> for ││ Help, </> for Search. Legend: [*] built-in [ ] excluded <M> module < > ││ ┌───────────────────────────────────────────────────────────────────────────┐ ││ │ Build Setup ---> │ ││ │ System Type ---> │ ││ │ Board Selection ---> │ ││ │ RTOS Features ---> │ ││ │ Device Drivers ---> │ ││ │ Networking Support ---> │ ││ │ Crypto API ---> │ ││ │ File Systems ---> │ ││ │ Graphics Support ---> │ ││ │ Memory Management ---> │ ││ │ Audio Support ---> │ ││ │ Video Support ---> │ ││ │ Wireless Support ---> │ ││ │ Binary Loader ---> │ ││ │ Library Routines ---> │ ││ │ Open Asymmetric Multi Processing ---> │ ││ │ Application Configuration ---> │ ││ └───────────────────────────────────────────────────────────────────────────┘ │├───────────────────────────────────────────────────────────────────────────────┤│ <Select> < Exit > < Help > < Save > < Load > │└───────────────────────────────────────────────────────────────────────────────┘Make menuconfig customiza o que deseja adicionar/retirar na placa. Por exemplo, permite adicionar os drivers de um determinado periférico, adicionar mensagens de debug, etc.
Após compilar, será gerado um BIN, o mesmo deve ser gravado no UBLOX NINA W106, via FLASHTOOLS, junto com partitions.bin e bootloader.bin.
Pode também ser utilizado esptools
TESTANDO NO U-BLOX NINA W106Abra então o TERATERM (115200,N,8.1)
Conexão com USB para SERIAL
TESTANDO NO U-BLOX NINA W106 SIMULADO NO WOKWI
No WOKWI, crie e desenhe o projeto abaixo
ALTERANDO PARA U-BLOX NINA W106
Patchs (SKIN U-BLOX NINA W106)
Descompacte em alguma pasta qualquer.
Veja
- Create a new project on wokwi
- Click inside the code editor, press "F1" and choose "Load custom board file..."
- Select the directory that contains the board definition files (board.json and board.svg)
- The board should load into Wokwi. Check the browser JavaScript console for any error messages.
- Paste the following code into the diagram.json file:{{"version": 1, "author": "Miguel Alexandre Wisintainer", "editor": "wokwi", "serialMonitor": { "display": "terminal" }, "parts": [ { "id": "esp", "type": "wokwi-custom-board" } ], "connections": [ [ "esp:TX0", "$serialMonitor:RX", "" ], [ "esp:RX0", "$serialMonitor:TX", "" ] ]}
Ficará assim
EXECUÇÃO NO WOKWI
Como visto anteriormente, foi gerado um arquivo Nuttx.bin para ser gravado junto com outros dois arquivos (bootloader.bin e partitions.bin) no U-BLOX NINA W106. No caso do WOKWI, os três arquivos devem ser agregados e então gerar um único BIN, o qual deve ser simulado no U-BLOX NINA W106.
Para isto, deve ser baixado o utility escrito em Python: esp32_binary_merger, o mesmo pode ser baixado pelo GIT em
Copie para a pasta deste utilitário os arquivos bootloader.bin/partitions.bin e sempre o Nuttx.bin gerado pela compilação do "APP" no NuttX.
Então execute o seguinte Script em Python
python3 merge_bin_esp.py --output_name app_output.bin --bin_path bootloader.bin nuttx.bin partitions.bin --bin_address 0x1000 0x10000 0x8000
Clicando no "Sketch" (não se preocupe com o código em Arduino), pressione F1 e escolha
LOAD HEX FILE AND SIMULATE
e então COLE o BIN app_output.bin
Em breve novos exemplos com vários sensores e atuadores
DÚVIDAS
suporte@smartcore.com.br
REFERÊNCIAS
Sobre a SMARTCORE
A SmartCore fornece módulos para comunicação wireless, biometria, conectividade, rastreamento e automação.
Nosso portifólio inclui modem 2G/3G/4G/NB-IoT/Cat.M, satelital, módulos WiFi, Bluetooth, GNSS / GPS, Sigfox, LoRa, leitor de cartão, leitor QR code, mecanismo de impressão, mini-board PC, antena, pigtail, LCD, bateria, repetidor GPS e sensores.
Mais detalhes em www.smartcore.com.br
Nenhum comentário:
Postar um comentário