PROGRAMANDO NINA W102 EM LUA RTOS WHITECAT - LINUX
O
objetivo deste BLOG é demonstrar como é possível fazer com que o módulo NINA W102 possa ser programado na linguagem LUA. Foi utilizado o EVK-NINA-W
para o teste.
VM
Lua-RTOS é um
sistema operacional em tempo real baseado na linguagem Lua, que foi projetada
para rodar em sistemas embarcados com requisitos mínimos de memória Flash e
Random Access Memory.
Lua-RTOS tem um
design de três camadas. Na camada superior, há um interpretador Lua 5.3.4 com
todos os módulos relevantes. Na camada intermediária, há um micro-kernel em
tempo real alimentado por FreeRTOS. Finalmente, na parte inferior, há uma
camada de abstração de hardware que pode se comunicar diretamente com o
hardware da plataforma. Quando se trata de portar Lua-RTOS para outras
plataformas, os programadores precisam escrever código apenas para a camada
inferior, porque as camadas superior e intermediária podem ser as mesmas em
todas as plataformas.
Uma das
características mais importantes do Lua-RTOS é que ele pode executar funções
Lua em encadeamentos nativos. Diferente das linhas de código Lua, os
encadeamentos nativos são planejados pelo sistema operacional e todos os
encadeamentos compartilham o mesmo estado Lua. Embora, historicamente, Lua
tenha sido uma linguagem de programação de thread único, Lua-RTOS dá a Lua a
capacidade de executar simultaneamente funções Lua para tarefas independentes
que compartilham o mesmo estado Lua. A capacidade de executar funções Lua em
diferentes encadeamentos torna os programas Lua RTOS mais inteligíveis, uma vez
que são escritos de maneira semelhante ao pensamento humano.
a) Para poder programar o LUA no NINA W102 será necessário que você compile o LUA.
Aqui esta o roteiro para compilar com algumas dicas
https://ricardoadulis.sharepoint.com/:u:/s/smartcore/EdiMd2kmVo9Fu0pm6ecEXk4BoqlX7lLK9kwB_6CpJ9WFRg?e=hjbXgF
https://github.com/whitecatboard/Lua-RTOS-ESP32/wiki/The-shell
Algumas dicas, o LUA tem um editor de texto interno, que pode ser habilitado com o seguinte comando
>os.shell(true)
Aqui estão os comandos do editor
https://github.com/whitecatboard/Lua-RTOS-ESP32/wiki/The-editor
Você poderá então também executar uma série de comandos parecidos com o do LINUX, como exemplo clear, cat, cd, pwd, ls, etc.
Exemplo de programa
Fontes:
https://github.com/whitecatboard/Lua-RTOS-ESP32/wiki/What's-Lua-RTOS%3F
https://www.espressif.com/en/media_overview/news/lua-rtos-esp32
-
Install ESP32 toolchain for your desktop platform. Please, follow the instructions provided by ESPRESSIF:
-
Clone esp-idf repository from ESPRESSIF:
git clone --recursive https://github.com/espressif/esp-idf.git
Repositório da Epressif, sempre tenha a última versão!!!
-
Clone Lua RTOS repository:
git clone --recursive https://github.com/whitecatboard/Lua-RTOS-ESP32
Repositório do LUA RTOS -
Setup the build environment:
Go to Lua-RTOS-ESP32 folder:
cd Lua-RTOS-ESP32
export PATH=$PATH:/home/osboxes/xtensa-esp32-elf/bin export IDF_PATH=/home/osboxes/esp-idf export LIBRARY_PATH="/usr/local/opt/gettext/lib:$LIBRARY_PATH"; export PKG_CONFIG_PATH="/usr/local/opt/ncurses/lib/pkgconfig:$PKG_CONFIG_PATH" export CPATH="/usr/local/opt/gettext/include:$CPATH"
Muito importante aqui, pois voce vai informar onde os arquivos estão. https://docs.espressif.com/projects/esp-idf/en/latest/get-started/
Now do:
source ./env
- Aqui você vai selecionar as LIBS do LUA que vais compilar, porta serial default, tamanho de memória, FS, etc.
-
You can change the default configuration doing:
make menuconfig
-
Compile:
Aqui ele vai compilar o programa e posteriormente gravar!
Build Lua RTOS, and flash it to your ESP32 board:
make flash Please, select a board:
1: Whitecat ESP32N12: Whitecat ESP32N1 DEVKIT3: Whitecat ESP32N2 DEVKIT4: Whitecat ESP32 LORA GW5: CITILAB ED16: Espressif Systems ESP32-CoreBoard7: Espressif Systems ESP32 PICO KIT8: Espressif Systems ESP-WROVER-KIT9: SparkFun ESP32 Thing10: Adafruit HUZZAH3211: Pycom FIPY12: Olimex ESP32-POE13: Olimex ESP32-Gateway14: Olimex ESP32-EVB15: DOIT ESP32 DEVKIT V116: WeMos ESP32 with 128x64 OLED17: EVK-NINA-W18: Silicognition wESP3219: M5Stack core board20: Generic ESP32 boardSelected board: 17
make flashfs
b) Abaixo algumas dicas sobre o make menuconfig
Escolha quais as LIBS que você vai utilizar! Não utilize todas aos mesmo tempo porque vai ultrapassar a capacidade de memoria flash do NINA W102.
Configure os pinos que serão utilizados pelas GPIOS. Nesta compilação o autor do arquivo omitiu.
Aqui foi alterada FS para 256K para sobrar mais espaco para LIBS. Voce vai ter que trabalhar com estes ajustes. Mas com a inclusão do W102 na lista, não será necessário!
(17: EVK-NINA-W)
Aqui você seleciona o canal de comunicação para transferência do engine LUA (não me refiro ao script LUA) e também o tamanho da memoria Flash.
Compilação
Gravação
sudo chmod 777 /dev/ttyUSBx
(não esquecer de Habilitar USB (EVK-NINA-W)
Chip is ESP32D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, Coding Scheme None
MAC: 30:ae:a4:3e:17:b4
Uploading stub...
Running stub...
Stub running...
Configuring flash size...
Auto-detected Flash size: 2MB
Compressed 21200 bytes to 13085...
Wrote 21200 bytes (13085 compressed) at 0x00001000 in 1.2 seconds (effective 145.2 kbit/s)...
Hash of data verified.
Compressed 1685456 bytes to 1027382...
Wrote 1685456 bytes (1027382 compressed) at 0x00050000 in 91.3 seconds (effective 147.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 102...
Wrote 3072 bytes (102 compressed) at 0x00008000 in 0.0 seconds (effective 1535.5 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
osboxes@osboxes:~/Lua-RTOS-ESP32$
Para se comunicar com o LUA, utilizei o PUTTY
E ao resetar o NINA W102, tem-se
https://github.com/whitecatboard/Lua-RTOS-ESP32/wiki/The-shell
Algumas dicas, o LUA tem um editor de texto interno, que pode ser habilitado com o seguinte comando
>os.shell(true)
Aqui estão os comandos do editor
https://github.com/whitecatboard/Lua-RTOS-ESP32/wiki/The-editor
Key | Function | Key | Function |
---|---|---|---|
up | Move one line up | Ctrl+S | Save file |
down | Move one line down | Ctrl+Q | Quit |
left | Move one character left | Ctrl+O | Open file |
right | Move one character right | Ctrl+W | Close file |
right | Move one character right | Ctrl+A | Select all |
page up | Move one page up | Ctrl+C | Copy selection to cliboard |
page down | Move one page down | Ctrl+X | Cut selection to clipboard |
Ctrl+left | Move to previous word | Ctrl+V | Paste from clipboard |
Ctrl+right | Move to next word | Ctrl+Z | Undo |
home | Move to start of line | Ctrl+R | Redo |
end | Move to end of line | Ctrl+F | Find text |
Ctrl+home | Move to start of file | Ctrl+G | Find next |
Ctrl+ end | Move to end of file | Ctrl+L | Goto line |
backspace | Delete previous character | Shift+left/right | Select text |
tab | Indent selection | Shift+tab | Unindent selection |
delete | Delete current character | Ctrl-Y | Help |
Você poderá então também executar uma série de comandos parecidos com o do LINUX, como exemplo clear, cat, cd, pwd, ls, etc.
Exemplo de programa
-- Blink function
function blink()
if (led_on) then
pio.pin.sethigh(pio.GPIO32)
led_on = false
else
pio.pin.setlow(pio.GPIO32)
led_on = true
end
end
-- Configure the GPIO where the led is attached
pio.pin.setdir(pio.OUTPUT, pio.GPIO32)
-- Variable for store the led status
led_on = false
-- Attach the timer
t0 = tmr.attach(50, blink)
-- Start the timer (the led blinks)
t0:start()
Edit o programa, salve e então execute
os.edit("teste.lua")
(CRTL-S =save, CRTL-Q = sai)
do teste.lua
O LED vai piscar a cada 50ms!
Suporte: suporte@smartcore.com.br
Fontes:
https://github.com/whitecatboard/Lua-RTOS-ESP32/wiki/What's-Lua-RTOS%3F
https://www.espressif.com/en/media_overview/news/lua-rtos-esp32
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