Pesquisar

AFSmartRadio Tranceiver 915Mhz Lora

AFSmartRadio Tranceiver 915Mhz Lora Módulo AFsmart Lora V1.0 montado Arduino Pro-Mini e Rádio Rf4463PRO A Internet das coisas (...

Controle saída Módulo AFSmart ESP8266 ESP-01


Controle saída Módulo AFSmart ESP8266 ESP-01


Exemplo de Aplicação Web com a placa Desenvolvimento AFSmart 1 Rele um pulsador ESP8266 ESP-01 desenvolvido pela AFEletrônica 


Módulo Desenvolvimento ESP8266 ESP-01

Especificações Módulo Desenvolvimento
Tensão de operação: 100~240Vac @ 50-60Hz
Contatos: NA, 1 NF e o Comum.
Corrente Contatos Rele: 28 VDC ~ 10A ou 125VAC ~ 10A.
Led’s indicadores: Alimentação/Rele acionado
Dimensões: 47,2mm x 47,7mm x 20mm

Este módulo possibilita conexão direta do Conversor USB-Serial ao módulo de Desenvolvimento, sem necessidade de conexão de jumpers. Conexões muito mais limpa e rápida para desenvolvimento de suas aplicações, isso usando os conversores fornecidos pela AFEletrônica, mas caso já possua um conversor, basta seguir a pinagem TX/RX/GND e conectar ao módulo..

Botão Reset e Program direto na placa, tudo o que você precisa em uma única placa para você pensar no desenvolvimento do software e não perder tempo com montagens e mau contatos.
Cuidado
Energia Elétrica pode matar, desligue a alimentação geral para manuseio, use os equipamentos de segurança individual



Proposta de Conexão de Carga ao módulo AFSmart 1Rele e 1 Pulsador



Instalando o Driver PL2303 caso adquirido junto com o produto AFSmart - procedimento para o driver em específico. Para demais driver realize a instalação conforme orientação do fabricante.
Abra propriedades de seu computador/Gerenciador de Dispositivos, para verificar se o mesmo não foi reconhecido automaticamente pelo Windows.




Importante.Caso tenha reconhecido automaticamente, procure enviar sua aplicação pela IDE do Arduino, se não houver sucesso no envio, o mesmo pode estar desatualizado, desinstale e instale a versão mais atual do driver. Sempre atente para a versão de seu Windows, 32 ou 64 bits, de forma a instalar do driver correto. Instale o driver sem a placa estar conectada ao computador, uma vez realizada a instalação do driver, caso necessário reinicie o computador, após conecte a placa para o reconhecimento automático da mesma. Escolhendo a Placa na IDE Escolha a placa ESP8266 conforme imagem abaixo.

Em porta escolha a serial que foi atribuída à placa. Caso apareça mais de uma COM em Porta, Vá até gerenciador de dispositivos do Windows, desconecte a placa, conecte novamente para verificar a serial a ser escolhida em Porta


Módulo desenvolvido e testado na  versão IDE Arduino 1.6.12, versões superiores não testado.

Se sua IDE não possuir a placa ESP8266, instale seguindo o seguinte procedimento:

  1. Em Arquivos\Preferências no em laranja adicione o seguinte caminho: http://arduino.esp8266.com/stable/package_esp8266com_index.json


1.1-    Em Ferramentas\BoadManager clique na opção em laranja:


1.2-    Vá até ao final, clique para realizar a instalação das placas ESP8266



Pronto sua IDE esta pronta para trabalhar com módulos ESP8266

Para enviar seu código para o módulo, a mesma deve estar alimentada, não basta somente conectar  à porta USB do computador.

Enviando sua aplicação ao módulo AFsmart ESP8266 ESP-01
1. Pressione e segure simultaneamente os botões RESET e PGM
2. Solte o Botão RESET mantendo PGM pressionado
3. Solte Botão PGM
4. ... Pronto envie sua aplicação, o módulo já esta no modo de receber sua aplicação.
5. Nota Atente à pinagem de seu conversor USB-Serial que pode ser diferente se não foi adquirido junto com o produto.


Pinout Módulo



PIN
Descrição
Função
Leitura/Escrita
1
TX
TX
Comunicação Serial
2
GND
GND
-
3
CH_PD
CHPD
-
4
GPIO_2
PULSADOR
Leitura Nível Baixo
5
RESET
RESET
-
6
GPI0_0
RELE
Aciona Nível Baixo
7
Vcc
Vcc
3V3
8
RX
RX
Comunicação Serial

Código exemplo controle Rele com o módulo AFSmart.

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>


const char *ssid = "SSID da sua rede"; //  SSID da sua rede
const char *password = "senha da sua rede"; // senha da sua rede

IPAddress ip(192,168,1,33); // ip atribuido ao módulo
IPAddress gateway(192,168,1,1); // base ip da sua rede
IPAddress subnet(255,255,255,0);

WiFiServer server(80); // porta para entrada externa
const int rele1 = 0;
const int  pulsador = 2;
boolean estado_pulsador = HIGH;
String header;

const char* APssid = "AF ELETRONICA"; // para mudar o nome da placa na rede
const char* APpassword = "12345678"; // senha para conexão à placa

// the following variables are long's because the time, measured in miliseconds,
// will quickly become a bigger number than can be stored in an int.
long lastDebounceTime = 0;  // the last time the output pin was toggled
long debounceDelay = 50;    // the debounce time; increase if the output flickers
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin


void setup ( void ) {

  pinMode ( rele1, OUTPUT );
  digitalWrite ( rele1, 1 );
  
  pinMode(pulsador,INPUT);

// Connect to WiFi network
  Serial.println();
  Serial.println();
  Serial.print("creating ");
  Serial.println(APssid);
  
  //WiFi.softAP(APssid);
  int channel = 2;
  WiFi.softAP(APssid, APpassword, channel);
  WiFi.begin(ssid, password);
  WiFi.config( ip,  gateway,  subnet);
  

  Serial.begin ( 115200 );
  delay(10);

  Serial.println();
  Serial.println();
  Serial.print("Conectando a...");
  Serial.println();
  Serial.println(ssid);
  
  
WiFi.begin ( ssid, password );
Serial.println ( "" );

// Wait for connection
while ( WiFi.status() != WL_CONNECTED ) {
delay ( 500 );
Serial.print ( "." );
}

Serial.println ( "" );
Serial.print ( "Connected a " );
  Serial.println();
Serial.println ( ssid );

  server.begin();
  Serial.print ( "Server Inicializado" );
  Serial.println();
Serial.print ( "IP address: " );
Serial.println ( WiFi.localIP() );

  

}

void loop ( void ) {
   int estado_pulsador= digitalRead(pulsador);
   //String buf = "";
    int estado_rele1 = digitalRead(rele1);
   // Serial.println(estado_rele1);


    // If the switch changed, due to noise or pressing:
   if (estado_pulsador != lastButtonState) {
    // reset the debouncing timer
    lastDebounceTime = millis();
  }

  if ((millis() - lastDebounceTime) > debounceDelay) {
    // whatever the reading is at, it's been there for longer
    // than the debounce delay, so take it as the actual current state:

    // if the button state has changed:
    if (estado_pulsador != buttonState) {
      buttonState = estado_pulsador;

      // only toggle the LED if the new button state is HIGH
      if (buttonState == LOW) {
        digitalWrite(rele1,!digitalRead(rele1));
      }
    }
  }

  lastButtonState = estado_pulsador;

 // Listenning for new clients
  WiFiClient client = server.available();


  if (client) {
    Serial.println("Novo Cliente");
       
    // bolean to locate when the http request ends
    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        header += c;
      // String req = client.readStringUntil('\r');
      // Serial.print(req);
  
        if (c == '\n' && blank_line) {
              // Serial.print(header);
          
                    client.println("HTTP/1.1 200 OK");
            client.println("Content-Type: text/html");
            client.println("Connection: close");
            //client.println("Refresh: 10");  // refresh the page automatically every 10 sec
            client.println();
            client.println("<!DOCTYPE HTML>");
            client.println("<html>");

            client.println("");
            
               
                
                 String buf = "";
                
                  
                  //buf += "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n<!DOCTYPE HTML>\r\n<html>\r\n";
                
                    buf += "<head>\r\n";
                    buf += "   <title>esp8266 webserver</title>\r\n";
                    buf += "</head>\r\n";
                    buf += "<body>\r\n";
                    buf += "<h1><a href=\"http://www.afeletronica.com.br/wireless-ct-8f6da\"><span style=\"color:#000000;\">ESP8266</span></a></h1>\r\n";
                
                  
                  buf += "<h3> ESP8266 Web Server by AFELetronica</h3>";
                  buf += "<p>RELE1 <a href=\"?function=Rele1_on\"><button>ON</button></a> <a href=\"?function=Rele1_off\"><button>OFF</button></a></p>";
                 // buf += "<p>RELE2 <a href=\"?function=Rele2_on\"><button>ON</button></a> <a href=\"?function=Rele2_off\"><button>OFF</button></a></p>";
                  buf += "<h4>AFELetronica</h4>";
                  buf += "</html>\n";
                  
                 //  client.println ("<button style=\"width:300px;height:40px;color:green;background-color:#87CEFB\"");
                 client.print(buf);
                
               // buf +=("<button style=\"width:300px;height:40px;color:green;background-color:#87CEFB\"");
                // client.println("<button style=\"width:120px;height:40px;color:green;background-color:#87CEFB\"");
           
                  //client.flush();

                  if (header.indexOf("Rele1_on") != -1){
                    digitalWrite(rele1, 0);
                     }
                     
                  else if (header.indexOf("Rele1_off") != -1){
                    digitalWrite(rele1, 1);
                     }

                  else {
                    Serial.println("invalid request");
                  //  client.stop();
                  }
                 // Serial.println("Client disonnected");
            
        header = "";
        break;
        }
        if (c == '\n') {
          // when starts reading a new line
          blank_line = true;
        }
        else if (c != '\r') {
          // when finds a character on the current line
          blank_line = false;
        }
      }
    }  
    // closing the client connection
    delay(1);
    client.stop();
    Serial.println("Client disconnected.");

  }
                   
                 
  }

Arduino Introdução

Arduino Introdução

Tutorial básico do Arduino. É uma introdução à respeito da placa Arduino. Como começar iniciar com Arduino

  • Introdução:

É uma plataforma de prototipagem eletrônica de hardware livre e placa única, desenvolvida com um microcontrolador Atmel, com suporte à entradas/saídas, possui linguagem de programação padrão, a qual tem origem em Wiring, e é essencialmente C/C++.

Ideal para desenvolvimentos embarcados, computação, robótica, automação e outras aplicações baseadas em eletrônica.
  • Software Requerido:

O Arduino pode ser rodado nos seguintes sistemas operacionais:
Windows
Linux
Mac OS
  • Instalação do Driver

Vale lembrar que para a placa ser reconhecida pelo sistema operacional, ser faz necessário a instalação do driver de comunicação, pois as placas se comunicam com o computador através de uma porta serial virtual, para instalação verifique qual o driver de sua placa. Após a instalação do driver anote qual porta serial foi definida para sua placa, é esta porta que será utilizada para comunicação entre computador e Arduino.

  • Introdução ao software Arduino:

Compreensão Geral

O código escrito na IDE Arduino é conhecido como SKETCH .
A compilação do código é conhecida como VERIFY/VERIFICAR .
A transferência do código do pc para a placa Arduino é conhecida como UPLOAD/CARREGAR .
Pressionando diretamente o botão UPLOAD/CARREGAR do software Arduino, o software primeiro verificará o código à procura de possíveis e erros, estando tudo correto, transferirá esse código para a placa do Arduino.

  • Após a instalação do driver da placa abra o software Arduino. Ira ser apresentado uma janela semelhante à:




Conhecendo os Botões do Software:



Antes de salvar o projeto, o nome do projeto é exibido como sketch_data . O projeto é salvo na pasta padrão Meus Documentos/Arduino ou local similar para Mac OS e Linux. A extensão do arquivo Arduino é NomeDoArquivo.ino. Por padrão, ele cria uma pasta e, nessa pasta, cria um arquivo com a extensão mencionada. Nota-se que o nome da pasta e o arquivo contendo devem ser os mesmos (se necessário mudar o nome do projeto, mude o nome de ambos).



  • Seleção da placa: 
Selecione a placa Arduino que você possui na lista disponível.



  •  Seleção da Porta: 

O número da porta que você anotou deve ser selecionado aqui ( a placa deve estar conectado ao computador). Atente que na parte inferior direita da IDE você possui as informações de qual placa foi selecionada, bem como qual porta COM.

  • Compreensões gerais para programação:


Agora mãos à obra você já consegue escrever e compilar seu primeiro código. Após escrito, salve-o e pressione o botão UPLOAD, para envio à sua placa.

Alternando Leds do Módulo AFSmartBoard PIC18F4550

Alternando Leds do Módulo AFSmartBoard PIC18F4550

Esta é uma aplicação de forma a apresentar o módulo AFSmartBoard PIC18F4550. Para  desenvolvimento claro não podíamos deixar de utilizar o módulo em questão, devido à facilidade de utiliza-la.

É um módulo interessante para cursos, palestras, treinamentos, tcc, etc..

E porque não desenvolvimento de aplicações profissionais, uma vez que a mesma é um módulo robusto, montado com tecnologia SMD, desenvolvida e fabricada pela AFEletronica.
O módulo facilita muito o desenvolvimento de qualquer aplicação uma vez que possui bootloader integrado, a aplicação é enviada usando a entrada USB.

Não sendo necessário o uso gravadores externos para utilizar o módulo, o que facilita muito a vida de estudantes, o custo de um desenvolvimento cai consideravelmente.

Embora não seja necessário utilizar gravador externo, ela possui o footprint para soldar uma barra de pinos e conectar o Pickit2 ou Pickit3 direto na placa, sem necessidade de realizar alterações o que não altera as características do módulo.

Querendo desenvolver uma aplicação com sensor de temperatura por exemplo, ela possui no seu interior footprint para soldar o sensor de temperatura DS18B20 lembrando que esse sensor é digital e não analógico.

Sua alimentação é de 9 @ 12 Vdc, possui chaveamento automático, da alimentação USB/Fonte, se estiver conectado o Cabo USB e a fonte de alimentação externa, neste caso estará consumindo corrente da fonte externa, se sem a fonte externa estará consumindo corrente da porta USB do computador, mas atente que a corrente máxima da USB de um computador é de 500mA. 

Sendo assim, se a aplicação a ser desenvolvida consome corrente superior à 500mA, mantenha uma fonte externa ligada à AFSmartBoard.

Possui no barramento ainda 3,3Vdc para alimentação de sensores do tipo acelerômetros, bussolas, etc. deve se tomar o cuidado somente com a corrente do que ligar neste pino pois a corrente fornecida é baixa, mas por si só já é uma excelente opção em relação aos módulos concorrentes no mercado.

Possui Botão RESET na placa e um botão ligado ao Pino RA3 do processador, sua função é entrar no  moto de gravação, mas pode ser utilizado também na aplicação como um botão comum, para ligar uma saída, desenvolver um menu, etc...

Para envio da Aplicação ao módulo é utilizado o programa USB HID Bootloader.


Para envio da aplicação, deve realizar o seguinte procedimento:
1 - Segure pressionado os botões RESET e RA3
2 - Solte RESET
3 - Solte RA3
Neste momento o módulo irá se conectar ao programa USB HID Bootloader, como mostrado acima.
Pronto, basta escolher a aplicação e enviar para o módulo.
Após enviar, basta apertar o botão RESET do módulo, ou então utilizar o botão RESET do programa, neste momento sua aplicação já estará rodando.

Importante informar sempre ao módulo para começar a gravação do arquivo de programa à partir do endereço 0x1000 da flash, pois abaixo desse endereço esta gravado o bootloader do módulo.

Caso seja gravado em posição errada a aplicação não irá rodar, mas não irá apagar o bootloader ou algo do tipo, basta voltar e informar a posição que dever começar a gravação do programa, utilizando o comando:

#pragma orgall 0x1000
void main (void) org 0x1000
{
     // aqui código da aplicação
}

Mas isso esta claro no exemplo abaixo.


Material utilizado:
Cabo USB para envio da aplicação e alimentação da placa.


/****************************************************************
Placa Desenvolvimento AFSmartBoard PIC18F4550 by AFEletronica
Aplicação desenvolvida utilizando o Compilador MikroC PRO for v6.6.1
www.afeletronica.com.br

Detalhes Importantes sobre a Placa e self programming USB:
        - devido ao Bootloader-self programming USB - ocupar do endereço 0x0000 ao 0x0FFF, o programa/ código
        deverá começar sempre à partir do endereço 0x1000, para isto usar sempre o linker script "rm18f4550 - USB Bootloader v2.90a"
        que fará o realocamento na compilação
        - Devido ao Uso com USB o Clock do PIC está em 48MHz, considerar este quando calculando baud, delays, etc.
        - Configurações de IOs e gerais de hardware estão na função AFSmartBoard_Init

REV.0 - Janeiro 2016

Notas: usando programa acima endereço 0x1000  - compatibilidade BootLoader USB
*****************************************************************/

#pragma orgall 0x1000
void AFSmartBoard_Init (void);

void main (void) org 0x1000
{
    AFSmartBoard_Init(); // função que inicializa a placa AFSmartBoard
    // Alterna um dos Leds
    PORTA.RA5 = 1;
    while (1)
    {
        // Altera o estado que se encontra o LED
        PORTA.RA5 ^= 1;
        PORTA.RA4 ^= 1;
        // Delay
        Delay_ms(2000);
    }
}
void AFSmartBoard_Init (void)
{
      RCON = 0X80; // Limpa o Registro de Reset
      ADCON1 = 0x0F; // Configura todas a portas como Portas Analogicas exeto A0
      CMCON = 0x0F; // Desabilita o Comparador
      LATA = 0;
      TRISA = 0b11001111;
      T0CON = 0b11000101; // Habilita Timer , 8 bits,clock interno, preescale 1:64
      LATB = 0; // Limpa Latch PortB
      TRISB = 0; // Coloca todos como tudo Saida
      LATD = 0;
      TRISD = 0x00; // Colocar PORTD como saída
      LATE = 0;
}


Realizando leitura com sensor AP3216 com Arduino


O sensor AP3216C é um módulo integrado que possui:
Sensor de Luz Ambiente
Sensor de Proximidade
Led IR

Encapsulado em um único componente. Sua aplicação é bastante vasta, é usado em telefones celulares, para medir a luz ambiente e ajustar o brilho da tela, ou para detectar quando você segura o telefone no ouvido e desativa a tela sensível ao toque.

A folha de dados para o AP3216C pode ser encontrada aqui: 

Possui comunicação I2c, podendo ser facilmente conectado ao Arduino ou qualquer processador de sua preferência.

Este é um exemplo usando-se do Arduino UNO, aceita os seguintes comandos e envia os mesmos à porta Serial.


Material necessário:
1 Resistor 330 Ohm


Os comandos aceitos, são como se segue:
write 0x00 0x01\n - gravará o valor 0x01 no registrador 0x00
read 0x0C\n - Le o valor que se encontra no registrador 0x0C
SensorLuzAmbienteOn\n - começará a transmitir o valor do sensor de luz ambiente na serial
SensorPresencaOn\n - começará a transmitir o valor do Sensor de Proximidade na serial
Off\n - irá parar de transmitir os dados do Sensor de Luz Ambiente como do Sensor Presença


Comando write 0x00 0x01\n - ira gravar o valor 01 no endereço 0x00 do sensor




read 0x0C\n -Retorno  o valor que se encontra no registrador 0x0C



SensorLuzAmbienteOn\n - começará a transmitir o valor do sensor de luz ambiente na serial, estes valores irão variar de acordo com a presença de mais ou menos luz


SensorPresencaOn\n - começará a transmitir o valor do Sensor de Proximidade na serial, este valor irá variar conforme se aproxima um objeto do sensor, o sensor de presença começa a apresentar variações em suas medidas com um obstáculo em torno de 5 à 7 cm aproximadamente, quanto mais próximo do sensor maior esta variação.


Imagem da montagem:


conexão:
Arduino UNO      AP3216
SCL  ------------    SCL                   
SDA ------------    SDA
GND ------------   GND 
3V3  ------------    VCC   
                             VLED ---[ 330 Ohm  ]--- VCC


Interface LCD16x2 com PIC18F4550 - AFSmart Board

AFSmart PIC 18F4550




Interface LCD16x2 com módulo AFSmart PIC18F4550
Introdução

LCDs (Liquid Crystal Displays) são usados ​​para exibir status ou parâmetros em sistemas embarcados.


O LCD 16x2 é uma dessas opções possui 16 pinos sendo que possui 8 pinos de dados (D0-D7) e 3 pinos de controle (RS, RW, EN). Os 5 pinos restantes são para fornecimento e luz de fundo para o LCD.

Os pinos de controle ajudam a configurar o LCD no modo de comando ou no modo de dados. Possibilitam também a configurar o modo de leitura ou modo de gravação e também quando ler ou gravar.

O LCD 16x2 pode ser usado no modo de 4 bits ou no modo de 8 bits, dependendo do requisito da aplicação. Para usá-lo, é necessário enviar certos comandos para o LCD no modo de comando e uma vez que o LCD é configurado de acordo com a nossa necessidade, podemos enviar os dados necessários no modo de dados.

Exemplo de Conexão Configuração 4 Bits:


Material Utilizado, clique no item para ser direcionado à loja:

Para desenvolvimento desta aplicação utilizamos o módulo AFSmartBoar com o Pic18F4550
O interessante deste módulo é que ele facilita muito o desenvolvimento de qualquer aplicação uma vez que ela possui bootloader integrado, ou seja você pode enviar sua aplicação para o módulo usando a entrada USB.

A placa possui entrada USB como mencionado para envio da aplicação.
Possui Entrada para fonte de até 12V e o interessante possui chaveamento automático, da alimentação USB/Fonte

Possui no barramento ainda 3v3 para alimentação de sensores do tipo acelerômetro,bussolas, etc. deve se tomar o cuidado somente com a corrente do que ligar neste pino pois a corrente fornecida é baixa, mas já é por si só uma excelente opção com relação aos módulos concorrentes.

É possível caso queira, mas não sendo necessário, utilizar gravadores externos um exemplo interessante são os PICKit2 ou PICKit3 sem fazer nenhum malabarismo pois possui entrada para conexão direta desses equipamentos de debug.

Há também no meio do módulo um footprint para se soldar um sensor de temperatura modelo DS18B20, ou seja é uma placa diferenciada devido à suas possibilidades.


Programação LCD16x2 com PIC18F4550 

Exemplo desenvolvido e compilado no IDE MickroC Versão 6.6.1
/****************************************************************
Placa Desenvolvimento AFSmartBoard PIC18F4550
Descrição: Mostra Mensagem no LCD 16x2 controlador padrão HD44780, comunicação com LCD no modo "4 bits" usando DB4 à DB7 p/ dados

Detalhes Importantes sobre a Placa e self programming USB:
  • devido ao Bootloader-self programming USB - ocupar do endereço 0x0000 ao 0x0FFF, o programa/ código
  • deverá começar sempre à partir do endereço 0x1000
  • Devido ao Uso com USB o Clock do PIC está em 48MHz, considerar este quando calculando baud, delays, etc.
  • Configurações de IOs e gerais de hardware estão na função AFSmartBoard_Init

Ligações: LCD no PORTB
Pino Placa        Pino LCD
RB0 ------------ 11 (DB4)
RB1 ------------ 12 (DB5)
RB2 ------------ 13 (DB6)
RB3 ------------ 14 (DB7)
RB4 ------------ 6  (EN)
RB5 ------------ 4  (RS)
GND----+         5
(RW)+            1  (Gnd)
+5V-----          2  (Vdd)
Trimpot--------- 3  (Vo)

REV.0 - ABR/2019

Notas: usando programa acima endereço 0x1000  - compatibilidade BootLoader USB
***********************************************************************************************************************************/

#pragma orgall 0x1000

#define  AFSmartBoard_str lcd_out


sbit LCD_RS at RB5_bit;
sbit LCD_EN at RB4_bit;      // CONFIGURAÇAO DOS PINOS DE LCD
sbit LCD_D7 at RB3_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D4 at RB0_bit;

sbit LCD_RS_Direction at TRISB5_bit;              // DIREÇAO DOS PINOS DO LCD
sbit LCD_EN_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB0_bit;

char MsgWelcome1 [] = " AFSMARTBOARD   ";
char MsgWelcome2 [] = " PIC 18F4550    ";

char MsgWelcome3 [] = "  Iniciando...  ";
char MsgWelcome4 [] = "   - 2019 -     ";
char MsgWelcome5 [] = "    Teste       ";
void AFSmartBoard_Init (void);
void Delay_LED (void);
int i;

void main (void) org 0x1000
{

        AFSmartBoard_Init();                // inicia placa

       lcd_init ( );
       lcd_cmd (_LCD_CLEAR);
       lcd_cmd (_LCD_CURSOR_OFF);

       while (1)
       {
       AFSmartBoard_str (1,1, MsgWelcome3 );
       DELAY_MS (500);
       AFSmartBoard_str (2,1, MsgWelcome4 ) ;
       Delay_ms (500);
       LCD_cmd (_LCD_CLEAR);

       AFSmartBoard_str (1,1, MsgWelcome1 );
       DELAY_MS (500);
       AFSmartBoard_str (2,1, MsgWelcome2 ) ;
       Delay_ms (500);
       AFSmartBoard_str (3,1, MsgWelcome5 ) ;
       Delay_ms (500);


        PORTA.RA4 = 1;

        for (i=0;i<15;i++)
        {
                // alterna LEDs
                PORTA.RA4 ^= 1; // ALTERNA O LED CONECTADO AO PINO RA4
                PORTA.RA5 ^= 1; // ALTERNA O LED CONECTADO AO PINO RA5
                Delay_ms (120);
        }

        while (1)  // ficará preso aqui indefinidamente, a ideia foi mostrar a escrita no display
        {
                // alterna LEDs
                PORTA.RA4 ^= 1;  // ALTERNA O LED CONECTADO AO PINO RA4
                PORTA.RA5 ^= 1;  // ALTERNA O LED CONECTADO AO PINO RA5
                Delay_ms (500);

        }


}

}

void AFSmartBoard_Init (void)
{
        RCON = 0X80;                                // LIMPA REGISTRO DE RESET
        ADCON1 = 0x0F;                          // CONFIGURA TODAS AS PORTAS ANALOGICAS COMO I/O

        CMCON = 0x0F;                            // DESABILITA COMPARADOR

        T0CON = 0b11000101;                // timer ativo, 8 bits,clock interno, preescale 1:64

        TRISA = 0;
        TRISB = 0;                                  // todos Saida
        TRISC = 0;
        TRISD = 0;
        TRISE = 0;

        PORTA = 0;                                // nível 0 saída
        PORTB = 0;
        PORTC = 0;
        PORTD = 0;
        PORTE = 0;


}

Para baixar manual do Módulo AFSmart

Como enviar o código para o Módulo AFSmart
A forma de entrar no modo boot do módulo AFSmart é como se segue:
Segura os dois botões prescionados.
Solta o botão Reset
Solta o Botão RA3
Pronto o módulo irá se conectar ao programa de boot 
Pronto, agora basta enviar sua aplicação...

Assista ao vídeo para verificar o procedimento.