terça-feira, 29 de janeiro de 2019

Nina W programado em LUA - WHITECAT

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.
Sobre LUA RTOS



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


VM
https://ricardoadulis.sharepoint.com/:u:/s/smartcore/EdiMd2kmVo9Fu0pm6ecEXk4BoqlX7lLK9kwB_6CpJ9WFRg?e=hjbXgF
  1. Install ESP32 toolchain for your desktop platform. Please, follow the instructions provided by ESPRESSIF:
  2. 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!!!
  3. Clone Lua RTOS repository:
    git clone --recursive https://github.com/whitecatboard/Lua-RTOS-ESP32
    

    Repositório do LUA RTOS
  4. Setup the build environment:
    Go to Lua-RTOS-ESP32 folder:
    cd Lua-RTOS-ESP32
    Edit the env file and change PATH, IDF_PATH, LIBRARY_PATH, PKG_CONFIG_PATH, CPATH for fit to your installation locations.
    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 
  5. Aqui você vai selecionar as LIBS do LUA que vais compilar, porta serial default, tamanho de memória, FS, etc.

  6. You can change the default configuration doing:
    make menuconfig
    Remember to check the device name for your board's USB-TO-SERIAL adapter under the "Serial flasher config / Default serial port" category.

  7. 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 ESP32N1
       2: Whitecat ESP32N1 DEVKIT
       3: Whitecat ESP32N2 DEVKIT
       4: Whitecat ESP32 LORA GW
       5: CITILAB ED1
       6: Espressif Systems ESP32-CoreBoard
       7: Espressif Systems ESP32 PICO KIT
       8: Espressif Systems ESP-WROVER-KIT
       9: SparkFun ESP32 Thing
      10: Adafruit HUZZAH32
      11: Pycom FIPY
      12: Olimex ESP32-POE
      13: Olimex ESP32-Gateway
      14: Olimex ESP32-EVB
      15: DOIT ESP32 DEVKIT V1
      16: WeMos ESP32 with 128x64 OLED
      17: EVK-NINA-W
      18: Silicognition wESP32
      19: M5Stack core board
      20: Generic ESP32 board

    Selected board: 17
    Flash the spiffs file system image to your ESP32 board:
    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)




 O terminal de comunicação com o LUA será a 115200,N,8,1


 A boa notícia é que a LIB WIFI está Habilitada



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


C) Digitando seu primeiro programa

Como dica, use TERATERM para digitação! Terminal padrão VT-100.


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


KeyFunctionKeyFunction
upMove one line upCtrl+SSave file
downMove one line downCtrl+QQuit
leftMove one character leftCtrl+OOpen file
rightMove one character rightCtrl+WClose file
rightMove one character rightCtrl+ASelect all
page upMove one page upCtrl+CCopy selection to cliboard
page downMove one page downCtrl+XCut selection to clipboard
Ctrl+leftMove to previous wordCtrl+VPaste from clipboard
Ctrl+rightMove to next wordCtrl+ZUndo
homeMove to start of lineCtrl+RRedo
endMove to end of lineCtrl+FFind text
Ctrl+homeMove to start of fileCtrl+GFind next
Ctrl+ endMove to end of fileCtrl+LGoto line
backspaceDelete previous characterShift+left/rightSelect text
tabIndent selectionShift+tabUnindent selection
deleteDelete current characterCtrl-YHelp

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