• How to Send E-mail using PIC Microcontroller and ESP8266 - Cách gửi E-mail bằng Vi điều khiển PIC và ESP8266

QC

How to Send E-mail using PIC Microcontroller and ESP8266 - Cách gửi E-mail bằng Vi điều khiển PIC và ESP8266

 


Trong hướng dẫn này, chúng ta hãy tìm hiểu cách gửi E-mail từ Bộ vi điều khiển PIC bằng cách sử dụng mô-đun WiFi nổi tiếng ESP8266. Hướng dẫn này sử dụng IC PIC16F877A và trình biên dịch MPLABX và XC8 để lập trình.


Ở phần cuối của hướng dẫn này, bạn sẽ có thể gửi E-mail từ bất kỳ ID E-mail thông thường nào như Gmail, yahoo, v.v. đến bất kỳ ID E-mail nào khác. Do đó, hướng dẫn này giả định rằng bạn có một số kiến thức cơ bản về Mô-đun ESP8266-01 và Bộ vi điều khiển PIC. Nếu chưa, các bài hướng dẫn sau sẽ giúp bạn


Chuẩn bị sẵn sàng với ID E-mail của bạn:


Khi bạn đã quyết định ID thư nào bạn muốn gửi email, hãy làm theo các bước dưới đây


Bước 1: Truy cập https://www.smtp2go.com/ và Đăng ký làm người dùng mới. Nhập tên, địa chỉ E-mail và mật khẩu của ID E-mail mà bạn muốn gửi thư từ đó.




Hướng dẫn này sử dụng ID thư: aswinthcd @ gmail.com và Mật khẩu: circuitdigest.


Bước 2: Nhấp vào đăng ký và bạn sẽ được gửi một thư xác minh đến ID thư đã nhập của bạn. Trong trường hợp này, nó là EMAIL@ gmail.com. Mở thư và nhấp vào “KÍCH HOẠT TÀI KHOẢN”


Bước 3: Nó có thể yêu cầu nhập lại mật khẩu, nếu được yêu cầu nhập mật khẩu trước đó. Trong trường hợp này, nó là 'chỉ số mạch'. Sau đó, bạn sẽ đăng nhập vào trang web SMPT2GO. Đó là bây giờ địa chỉ E-mail của bạn đã sẵn sàng để gửi thư bằng Mô-đun ESP8266.


Bước 4: Bước cuối cùng là mã hóa ID và mật khẩu E-mail thành định dạng cơ sở 64 bằng cách sử dụng trang web này https://www.base64encode.org/. Chúng tôi sẽ sử dụng điều này trong chương trình PIC của chúng tôi



In this case the encoded values will look as shown in table below.

ParameterNormal formatEncoded in base 64
Mail IDEMAIL@ gmail.comYXN3aW50aGNkQGdtYWlsLmNvbQ==
PasswordPASSY2lyY3VpdGRpZ2VzdA==


Getting your Hardware Ready:



Màn hình LCD được sử dụng ở đây cho mục đích gỡ lỗi. Bạn không bắt buộc phải kết nối cái này. Chương trình sẽ hoạt động tốt ngay cả khi không có màn hình LCD. Nếu bạn muốn biết thêm về các sơ đồ, bạn hãy truy cập hướng dẫn này. (Giao diện PIC với ESP).


Bạn có thể chỉ cần lắp ráp mạch này trên một breadboard và sau đó tiến hành lập trình.


Programming your PIC to send E-mail:

Để gửi một E-mail từ ESP8266, một chuỗi lệnh AT phải được gửi đến mô-đun ESP. Các bước sau phải được thực hiện để gửi E-mail từ ESP8266.

  1. Set the module in AP+STA (Access Point and station) mode
  2. Connect to an Access point to get internet connection
  3. Enable multiple connections
  4. Start a server on any specific port
  5. Establish a TCP connection  with SMPT2GO website
  6. Navigate to the Login section of the website
  7. Enter the E-mail ID and Password in base64 format
  8. Enter From mail ID
  9. Enter To mail ID
  10. Enter the Subject of the mail
  11. Enter the body of the mail
  12. Indicate the end of mail
  13. Send the mail
  14. Quit the TCP connection


Nó là một quá trình hơi dài và tẻ nhạt nhưng đừng lo lắng. Tôi đã đơn giản hóa quy trình bằng cách tạo tệp tiêu đề và bạn có thể sử dụng trực tiếp nó bằng cách chỉ cần gọi một số hàm (giải thích bên dưới), điều này làm cho tác vụ này trở nên rất dễ dàng. Mã hoàn chỉnh cùng với tệp tiêu đề có thể được tải xuống từ đây.


Lưu ý: Nếu bạn đang sử dụng mã trong một dự án mới, hãy đảm bảo rằng bạn tải xuống tệp tiêu đề và thêm nó vào dự án của mình.


Tôi đã giải thích một số phần quan trọng của mã bên dưới, các phần khác tự giải thích. Nhưng nếu bạn có bất kỳ nghi ngờ nào hãy sử dụng phần bình luận.

/*Check if the ESP_PIC communication is successful*/

    do

    {

    Lcd_Set_Cursor(1,1);

    Lcd_Print_String("ESP not found");

    }while (!esp8266_isStarted()); //wait till the ESP send back "OK"

    Lcd_Set_Cursor(1,1);

    Lcd_Print_String("ESP is connected");

    __delay_ms(1500);

    Lcd_Clear();

    /*Yes ESP communication successful -Proceed*/

Phần mã này được sử dụng để kiểm tra xem có kết nối thích hợp được thiết lập giữa PIC và ESP8266 hay không. Chỉ khi cả hai đều có thể gửi và nhận dữ liệu thông qua USART, chương trình sẽ tiến hành bước tiếp theo.


esp8266_mode(3);

Chức năng này sẽ đặt ESP8266 ở chế độ 3. Có nghĩa là giờ đây mô-đun có thể hoạt động như một Điểm truy cập và cũng như một máy chủ.


esp8266_connect("BPAS home","cracksun");

Chức năng này được sử dụng để kết nối mô-đun ESP8266 với Bộ định tuyến Wifi của bạn. Trong trường hợp này “BPAS home” là tên tín hiệu Wifi của tôi và “crackun” là mật khẩu của tôi. Bạn phải sử dụng chi tiết tín hiệu Wifi của riêng mình.


_esp8266_enale_MUX(); //Enable multiple connections

_esp8266_create_server(); //Create a server on port 80

Hai chức năng này được sử dụng để kích hoạt nhiều kết nối và tạo một máy chủ trên cổng 80.


 _esp8266_connect_SMPT2GO();


Bây giờ, bằng cách sử dụng chức năng này, chúng ta có thể thiết lập kết nối TCP với SMPT2GO. Khi kết nối được thiết lập, chức năng này cũng sẽ chuyển đến trang Đăng nhập của trang web.


_esp8266_login_mail("YXN3aW50aGNkQGdtYWlsLmNvbQ==","Y2lyY3VpdGRpZ2VzdA==");
Sử dụng chức năng này để nhập ID Email và mật khẩu của bạn ở định dạng cơ sở 64. Như bạn có thể thấy các giá trị được mã hóa này giống như được hiển thị trong bảng trên. Các giá trị được mã hóa của bạn sẽ khác nhau dựa trên ID E-mail và mật khẩu của bạn.

Working:

Khi bạn đã hoàn tất với phần cứng và chương trình của mình. Đơn giản chỉ cần đưa mã vào MCU PIC của bạn. Sau đó BẬT nguồn mạch của bạn. Nếu mọi thứ diễn ra như mong đợi, màn hình LCD của bạn sẽ hiển thị trạng thái của quá trình và cuối cùng là thông báo “Thư đã được gửi” như trong video bên dưới. Phần cứng của bạn có thể trông giống như thế này.

Sau khi màn hình LCD hiển thị rằng thư đã được gửi đi, hãy kiểm tra Hộp thư đến và thư mục Spam để tìm thư đã gửi. Bạn đã nhận được thư như hình dưới đây ..

CODE :

#define _XTAL_FREQ 20000000

#define RS RD2
#define EN RD3
#define D4 RD4
#define D5 RD5
#define D6 RD6
#define D7 RD7

#include <xc.h>
#include "esp8266_functions.h"

#pragma config FOSC = HS        // Oscillator Selection bits (HS oscillator)
#pragma config WDTE = OFF       // Watchdog Timer Enable bit (WDT disabled)
#pragma config PWRTE = OFF       // Power-up Timer Enable bit (PWRT enabled)
#pragma config BOREN = ON       // Brown-out Reset Enable bit (BOR enabled)
#pragma config LVP = OFF        // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3 is digital I/O, HV on MCLR must be used for programming)
#pragma config CPD = OFF        // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)
#pragma config WRT = OFF        // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)
#pragma config CP = OFF         // Flash Program Memory Code Protection bit (Code protection off)

//****LCD Functions Developed by Circuit Digest.***///
void Lcd_SetBit(char data_bit) //Based on the Hex value Set the Bits of the Data Lines
{
    if(data_bit& 1) 
        D4 = 1;
    else
        D4 = 0;

    if(data_bit& 2)
        D5 = 1;
    else
        D5 = 0;

    if(data_bit& 4)
        D6 = 1;
    else
        D6 = 0;

    if(data_bit& 8) 
        D7 = 1;
    else
        D7 = 0;
}

void Lcd_Cmd(char a)
{
    RS = 0;           
    Lcd_SetBit(a); //Incoming Hex value
    EN  = 1;         
        __delay_ms(4);
        EN  = 0;         
}

Lcd_Clear()
{
    Lcd_Cmd(0); //Clear the LCD
    Lcd_Cmd(1); //Move the curser to first position
}

void Lcd_Set_Cursor(char a, char b)
{
    char temp,z,y;
    if(a== 1)
    {
      temp = 0x80 + b - 1; //80H is used to move the curser
        z = temp>>4; //Lower 8-bits
        y = temp & 0x0F; //Upper 8-bits
        Lcd_Cmd(z); //Set Row
        Lcd_Cmd(y); //Set Column
    }
    else if(a== 2)
    {
        temp = 0xC0 + b - 1;
        z = temp>>4; //Lower 8-bits
        y = temp & 0x0F; //Upper 8-bits
        Lcd_Cmd(z); //Set Row
        Lcd_Cmd(y); //Set Column
    }
}

void Lcd_Start()
{
  Lcd_SetBit(0x00);
  for(int i=1065244; i<=0; i--)  NOP();  
  Lcd_Cmd(0x03);
    __delay_ms(5);
  Lcd_Cmd(0x03);
    __delay_ms(11);
  Lcd_Cmd(0x03); 
  Lcd_Cmd(0x02); //02H is used for Return home -> Clears the RAM and initializes the LCD
  Lcd_Cmd(0x02); //02H is used for Return home -> Clears the RAM and initializes the LCD
  Lcd_Cmd(0x08); //Select Row 1
  Lcd_Cmd(0x00); //Clear Row 1 Display
  Lcd_Cmd(0x0C); //Select Row 2
  Lcd_Cmd(0x00); //Clear Row 2 Display
  Lcd_Cmd(0x06);
}

void Lcd_Print_Char(char data)  //Send 8-bits through 4-bit mode
{
   char Lower_Nibble,Upper_Nibble;
   Lower_Nibble = data&0x0F;
   Upper_Nibble = data&0xF0;
   RS = 1;             // => RS = 1
   Lcd_SetBit(Upper_Nibble>>4);             //Send upper half by shifting by 4
   EN = 1;
   for(int i=2130483; i<=0; i--)  NOP(); 
   EN = 0;
   Lcd_SetBit(Lower_Nibble); //Send Lower half
   EN = 1;
   for(int i=2130483; i<=0; i--)  NOP();
   EN = 0;
}

void Lcd_Print_String(char *a)
{
    int i;
    for(i=0;a[i]!='\0';i++)
       Lcd_Print_Char(a[i]);  //Split the string using pointers and call the Char function 
}
//***End of LCD functions***//

void main()
{
    TRISD = 0x00;
    Lcd_Start();
    Initialize_ESP8266() ; 
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("Circuit Digest");
    Lcd_Set_Cursor(2,1);
    Lcd_Print_String("Mail using ESP");
    __delay_ms(1500);
    Lcd_Clear();
    
    
   
    /*Check if the ESP_PIC communication is successful*/
    do
    {
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("ESP not found");
    }while (!esp8266_isStarted()); //wait till the ESP send back "OK"
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("ESP is connected");
    __delay_ms(1500);
    Lcd_Clear();
    /*Yes ESP communication successful -Proceed*/
    
    
    /*Put the module in AP+STA*/
    esp8266_mode(3);
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("ESP set AP+STA");
    __delay_ms(1500);
    Lcd_Clear();
    /*Module set as AP+STA*/
    
    
    /*Connect to a AccesPoint*/
    esp8266_connect("BPAS home","cracksun"); //Enter you WiFi name and password here, here BPAS home is the name and cracksun is the pas
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("Connected 2 WIFI"); //Print on LCD for debugging. 
    __delay_ms(1500);
    Lcd_Clear();
    /*Connected to WiFi*/
    
    
    
    _esp8266_enale_MUX(); //Enable multiple connections
    _esp8266_create_server(); //Create a server on port 80
    _esp8266_connect_SMPT2GO(); //Establish TCP connection with SMPT2GO
    
    
    /*LOG IN with your SMPT2GO approved mail ID*/
    /*Visit the page https://www.smtp2go.com/ and sign up using any Gmail ID
     * Once you gmail ID is SMPT2GO approved convert your mail ID and password in 64 base format
     * visit https://www.base64encode.org/ for converting 64 base format online
     * FORMAT -> _esp8266_login_mail("mailID in base 64","Password in base 64");
     * This program uses the ID-> aswinthcd@ gmail.com and password -> circuitdigest as an example
     */
    _esp8266_login_mail("YXN3aW50aGNkQGdtYWlsLmNvbQ==","Y2lyY3VpdGRpZ2VzdA==");
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("Login Successful"); //display on LCD for debugging
    __delay_ms(1500);
    Lcd_Clear();
    /*End of Login*/
    
    
    _esp8266_mail_sendID("aswinthcd@ gmail.com"); //The sender mail ID
    _esp8266_mail_recID("mailtoaswinth@ gmail.com"); //The Receiver mail ID
    
    _esp8266_start_mail();
    _esp8266_mail_subject("Mail from ESP8266"); //Enter the subject of your mail
    _esp8266_mail_body("Testing Success -CircuitDigest"); //Enter the body of your mail       
    _esp8266_End_mail();
    
    _esp8266_disconnect_SMPT2GO();
    
    
    Lcd_Set_Cursor(1,1);
    Lcd_Print_String("Mail Sent"); //Print on LCD for debugging
 
            
    while(1)
    {
        //do nothing 
    }

}





Nap Code vào PY32F003 dùng Stlink

 Nap Code vào PY32F003 dùng Stlink Bước 1: Cài đặt  KeilC v5.39 theo link sau ( chú ý 5.39 keil c mới nạp ok). https://edge07.111.ir.cdn.ir/...