Introdução
Arduino é uma plataforma de hardware de código aberto popular, conhecida por sua simplicidade, facilidade de uso e abertura. Ele fornece uma rica coleção de funções de biblioteca e códigos de exemplo, tornando-o acessível mesmo para indivíduos sem experiência em programação. Além disso, a comunidade Arduino é altamente ativa, permitindo fácil acesso a uma ampla variedade de tutoriais, documentação e suporte de projetos.
A série Milk-V Duo agora suporta o desenvolvimento do Arduino. Você pode usar diretamente o Arduino IDE e, após uma configuração simples, começar a utilizá-lo.
A CPU da série Duo adota um design de núcleo grande, onde o firmware do Arduino é executado no núcleo pequeno, enquanto o núcleo grande é responsável pela comunicação com o IDE do Arduino. Ele recebe o firmware do Arduino e o carrega no pequeno núcleo para execução. Ao mesmo tempo, o sistema Linux no grande núcleo também funciona normalmente.
1. Instale o Arduino
Arduino IDE oferece suporte a três sistemas operacionais: Windows, Linux e macOS. De acordo com o sistema que você está usando, acesse o site oficial do Arduino para baixar o pacote de instalação correspondente para instalação. A versão mais recente atual é 2.3.2 e é recomendado usar a versão mais recente.
Adicione o Duo ao Arduino
Abra o Arduino IDE, selecione Preferences
no menu File
e adicione o endereço do arquivo de configuração do Duo na aba Additional boards manager URLs
Settings
:
https://github.com/milkv-duo/duo-arduino/releases/download/config/package_sg200x_index.json
Faça download do endereço do arquivo json mais recente em Releases .
Se você configurou outros endereços de placa de desenvolvimento antes, separe-os com vírgulas ou clique no ícone no lado direito da barra de endereço para abrir a janela e siga as instruções para adicioná-los.
Após configurar, selecione menu Board
no menu Tools
, abra o Boards Manager
, procure por SG200X e clique em Install
.
Neste ponto, o ambiente de desenvolvimento Duo no Arduino IDE foi instalado. Agora você pode escrever e testar o código.
Teste o pisca LED
Atualmente, o sistema de cartão SD do Duo precisa gravar firmware compatível com Arduino. Faça download do firmware com o prefixo arduino
da versão mais recente do firmware.
Consulte Inicialize o Duo para instalar o sistema de cartão SD.
No caso
arduino-milkv-duo256m-sd-v1.1.2-2024-0801.img.zip
Use um cabo USB para conectar o Duo ao computador e o Duo ligará automaticamente.
O firmware padrão do Duo, o sistema Linux de núcleo grande, controlará o piscar do LED integrado. Isto é conseguido através do script de inicialização. Agora vamos usar o Arduino de núcleo pequeno para acender o LED. Precisamos desabilitar o script de LED piscando no Linux de núcleo grande. No terminal Execute in do Duo:
mv /mnt/system/blink.sh /mnt/system/blink.sh_backup && sync
Ou seja, renomeie o script de LED piscando. Após reiniciar o Duo, o LED não piscará mais:
reboot
Neste momento, haverá um dispositivo serial adicional na “Porta” do “Gerenciador de Dispositivos” do computador.
Na interface principal do Arduino IDE, clique em Select Board
e, em seguida, clique em Select other board and port...
Procure por "duo", selecione Duo Dev Module
para Duo, selecione Duo256 Dev Module
para Duo256M, selecione a porta serial correspondente na porta e clique em OK.
Abra o programa Examples
> 01.Basics
> Blink
de teste no menu File
do Arduino IDE. A função deste programa é piscar o LED integrado do dispositivo Arduino. In Duo Também é compatível. Pode ser necessário instalar o pyserial para fazer o upload e, em seguida, vamos clicar no botão Upload
para testar:
Neste momento, você pode ver o LED da placa Duo piscando em intervalos de 1 segundo.
2. Duo Arduino pin resource
Duo
SPI PWM I2C UART GPIO NAME PIN PIN NAME GPIO ADC 1 GP0 1 40 VBUS 2 GP1 2 39 VSYS GND 3 38 GND PWM7 GP2 4 37 3V3_EN PWM6 GP3 5 36 3V3(OUT) PWM5 UART3_TX GP4 6 35 PWM6 UART3_RX GP5 7 34 GND 8 33 GND SPI2_SCK PWM9 I2C3_SDA GP6 9 32 GP27 SPI2_MOSI PWM8 I2C3_SCL GP7 10 31 GP26 ADC1 SPI2_MISO PWM7 I2C1_SDA GP8 11 30 RUN SPI2_CSn PWM4 I2C1_SCL GP9 12 29 GP22 GND 13 28 GND PWM10 I2C2_SDA 14 GP10 14 27 GP21 27 PWM11 I2C2_SCL 15 GP11 15 26 GP20 26 PWM4 GP12 16 25 GP19 25 PWM5 GP13 17 24 GP18 24 GND 18 23 GND 19 GP14 19 22 GP17 22 20 GP15 20 21 GP16 21 0 LED
SPI | PWM | I2C | UART | GPIO | NAME | PIN | PIN | NAME | GPIO | ADC |
---|---|---|---|---|---|---|---|---|---|---|
1 | GP0 | 1 | 40 | VBUS | ||||||
2 | GP1 | 2 | 39 | VSYS | ||||||
GND | 3 | 38 | GND | |||||||
PWM7 | GP2 | 4 | 37 | 3V3_EN | ||||||
PWM6 | GP3 | 5 | 36 | 3V3(OUT) | ||||||
PWM5 | UART3_TX | GP4 | 6 | 35 | ||||||
PWM6 | UART3_RX | GP5 | 7 | 34 | ||||||
GND | 8 | 33 | GND | |||||||
SPI2_SCK | PWM9 | I2C3_SDA | GP6 | 9 | 32 | GP27 | ||||
SPI2_MOSI | PWM8 | I2C3_SCL | GP7 | 10 | 31 | GP26 | ADC1 | |||
SPI2_MISO | PWM7 | I2C1_SDA | GP8 | 11 | 30 | RUN | ||||
SPI2_CSn | PWM4 | I2C1_SCL | GP9 | 12 | 29 | GP22 | ||||
GND | 13 | 28 | GND | |||||||
PWM10 | I2C2_SDA | 14 | GP10 | 14 | 27 | GP21 | 27 | |||
PWM11 | I2C2_SCL | 15 | GP11 | 15 | 26 | GP20 | 26 | |||
PWM4 | GP12 | 16 | 25 | GP19 | 25 | |||||
PWM5 | GP13 | 17 | 24 | GP18 | 24 | |||||
GND | 18 | 23 | GND | |||||||
19 | GP14 | 19 | 22 | GP17 | 22 | |||||
20 | GP15 | 20 | 21 | GP16 | 21 | |||||
0 | LED |
Duo256M
|
---|
3. EXEMPLO DE CÓDIGO TM1637
Este programa implementa o pino físico 19 (DIO) e 20 (CLK) do Duo 256 para emitir níveis altos e baixos para se comunicar com o TM1637, gerando DATA e CLOCK.
Código de teste (após instalar LIBRARY TM1637)
#include <Arduino.h>#include <TM1637Display.h>// Module connection pins (Digital Pins)#define CLK 20#define DIO 19// The amount of time (in milliseconds) between tests#define TEST_DELAY 2000const uint8_t SEG_DONE[] = {SEG_B | SEG_C | SEG_D | SEG_E | SEG_G, // dSEG_A | SEG_B | SEG_C | SEG_D | SEG_E | SEG_F, // OSEG_C | SEG_E | SEG_G, // nSEG_A | SEG_D | SEG_E | SEG_F | SEG_G // E};TM1637Display display(CLK, DIO);void setup(){}void loop(){int k;uint8_t data[] = { 0xff, 0xff, 0xff, 0xff };uint8_t blank[] = { 0x00, 0x00, 0x00, 0x00 };display.setBrightness(0x0f);// All segments ondisplay.setSegments(data);delay(TEST_DELAY);// Selectively set different digitsdata[0] = display.encodeDigit(0);data[1] = display.encodeDigit(1);data[2] = display.encodeDigit(2);data[3] = display.encodeDigit(3);display.setSegments(data);delay(TEST_DELAY);/*for(k = 3; k >= 0; k--) {display.setSegments(data, 1, k);delay(TEST_DELAY);}*/display.clear();display.setSegments(data+2, 2, 2);delay(TEST_DELAY);display.clear();display.setSegments(data+2, 2, 1);delay(TEST_DELAY);display.clear();display.setSegments(data+1, 3, 1);delay(TEST_DELAY);// Show decimal numbers with/without leading zerosdisplay.showNumberDec(0, false); // Expect: ___0delay(TEST_DELAY);display.showNumberDec(0, true); // Expect: 0000delay(TEST_DELAY);display.showNumberDec(1, false); // Expect: ___1delay(TEST_DELAY);display.showNumberDec(1, true); // Expect: 0001delay(TEST_DELAY);display.showNumberDec(301, false); // Expect: _301delay(TEST_DELAY);display.showNumberDec(301, true); // Expect: 0301delay(TEST_DELAY);display.clear();display.showNumberDec(14, false, 2, 1); // Expect: _14_delay(TEST_DELAY);display.clear();display.showNumberDec(4, true, 2, 2); // Expect: __04delay(TEST_DELAY);display.showNumberDec(-1, false); // Expect: __-1delay(TEST_DELAY);display.showNumberDec(-12); // Expect: _-12delay(TEST_DELAY);display.showNumberDec(-999); // Expect: -999delay(TEST_DELAY);display.clear();display.showNumberDec(-5, false, 3, 0); // Expect: _-5_delay(TEST_DELAY);display.showNumberHexEx(0xf1af); // Expect: f1Afdelay(TEST_DELAY);display.showNumberHexEx(0x2c); // Expect: __2Cdelay(TEST_DELAY);display.showNumberHexEx(0xd1, 0, true); // Expect: 00d1delay(TEST_DELAY);display.clear();display.showNumberHexEx(0xd1, 0, true, 2); // Expect: d1__delay(TEST_DELAY);// Run through all the dotsfor(k=0; k <= 4; k++) {display.showNumberDecEx(0, (0x80 >> k), true);delay(TEST_DELAY);}// Brightness Testfor(k = 0; k < 4; k++)data[k] = 0xff;for(k = 0; k < 7; k++) {display.setBrightness(k);display.setSegments(data);delay(TEST_DELAY);}// On/Off testfor(k = 0; k < 4; k++) {display.setBrightness(7, false); // Turn offdisplay.setSegments(data);delay(TEST_DELAY);display.setBrightness(7, true); // Turn ondisplay.setSegments(data);delay(TEST_DELAY);}// Done!display.setSegments(SEG_DONE);while(1);}
Sobre a SMARTCORE
A SMARTCORE FORNECE CHIPS E MÓDULOS PARA IOT, COMUNICAÇÃO WIRELESS, BIOMETRIA, CONECTIVIDADE, RASTREAMENTO E AUTOMAÇÃO. NOSSO PORTFÓLIO INCLUI MODEM 2G/3G/4G/NB-IOT, SATELITAL, MÓDULOS WIFI, BLUETOOTH, GPS, SIGFOX, LORA, LEITOR DE CARTÃO, LEITOR QR CCODE, MECANISMO DE IMPRESSÃO, MINI-BOARD PC, ANTENA, PIGTAIL, BATERIA, REPETIDOR GPS E SENSORES.
Nenhum comentário:
Postar um comentário