مكتبه ESP8266 مهمتها
1- عمل تهيئه للموديل مع ربطه بالشبكه راوتر خاصه بك
2- تجعل موديل كراوتر يمكن من خلاله ارسال واستقبال البيانات بدون حاجه الى راوتر
3- قراءه البيانات
4- ارسال البيانات
مكتبه تحتاج الى هذه التعريفات
كود:
//************** ESP8266 parameter*********//
sbit RST_ESP8266 at LATC0_bit;
sbit RST_ESP8266_dir at TRISC0_bit;
// Change following information to match your network settings
unsigned char *SSID_STA = "your network";
unsigned char *password_STA = "your password";
unsigned char *port = "1234";
unsigned char *SSID_AP = "ESP8266";
unsigned char *password_AP = "ESP12345";
unsigned char *IP_address="210.201.4.120";
const char chanel = 6;
const char enc = 4;
char ESP_id =0;
const char esp8266_rec_max=10;
unsigned char esp8266_received_data[esp8266_rec_max+1];
حيث تحتاج منك طرف للريسيت
واسم شبكتك والباسورد
واسم الشبكه الي يبث بها موديل مع الباسورد لاتقل عن 8
والايبي station للموديل حتى تتمكن من خلاله اتصال مع الاجهزه او برامج وكذلك البورت
اضافه الى اقصى بيانات ممكن استقبالها طبعا لو وضعنا 10 مثلا واستقبلت انت فقط 2 بايت فان مكتبه اتوماتيكا ستعطيك 2 بايت ولكن ان استلمت اكثر من 10 بايت فهي لن تعطيك سوى 10 فقط
كما تحتاج مكتبه الى تعريف uart مستخدم
كود:
UART1_Init(115200);
Delay_ms(300);
// Setup interrupts
RC1IE_bit = 1; // Enable Rx1 intterupts
PEIE_bit = 1; // Enable peripheral interrupts
GIE_bit = 1; // Enable global interrupts
على فكره هنا استخدمت uart اي ليس uart1 او uart2 هذا uart يمكنك من
خلالها استخدام اي من uart1 او uart2
في مثالنا استخدمنا uart1 وبتالي مكتبه uart اتوماتيكا ستأخذ uart1 لذلك من تدخل داخل مكتبه ستجد بعض اوامر مثل
او
كود:
esp_tmp = UART_Rd_Ptr();
معناها انني استخدمت مكتبه uart والتي تعمل مع العائله 18F وبعض البيكات 16F والغايه من هذه مكتبه هي استخدام اي منفذ لuart مثلا uart1 او uart2 بدون حاجه الى تغير الاوامر في الكود اي مكتبه عامه
هي default تعمل على uart1 ولكن لو استخدمت uart2 عليك فقط بأعاده تفعيل مكتبه uart على uart2
كود:
UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle); // set UART2 active
طبعا هذه مكتبه مفيده مثلا تستطيع استخدام نفس الكود لقراءه البيانات من خلال uart1 وuart2
حيث تستخدم في حاله قراءه من uart1
كود:
UART_Set_Active(&UART1_Read, &UART1_Write, &UART1_Data_Ready, &UART1_Tx_Idle); // set UART1 active
وفي حاله قراءه او الارسال من uart2
كود:
UART_Set_Active(&UART2_Read, &UART2_Write, &UART2_Data_Ready, &UART2_Tx_Idle); // set UART2 active
==================================
اما بعض البكات التي لاتتوافق معها مكتبه بسبب استخدام مكتبه uart يمكنك فقط تعديل على اوامر uart وسوف تعمل معاك
======================================
طبعا بالبدايه راح راح تقوم مكتبه بتخاطب مع موديل لغرض عمل تهيئه
حيث ترسل
1-AT
2- ATE0
3-AT+RST
4-AT+CWMODE
5-AT+CIPMUX
6- ربط مع راوتر عن طريق AT+CWJAP
7- جعل موديل كمحطه الارسال عن طريق AT+CWSAP
8- واخير عمل اتصال ببروتوكول udp وفتح بورت عن طريق AT+CIPSTART
طبعا انا خليت ليد من يكمل كل هذه الخطوات يضيئ ليد لدلاله على انه تم موديل اصبح جاهز وتم عمل اتصال مع راوتر
كود:
void configuration_ESP8266()
{
RST_ESP8266=0;
RST_ESP8266_dir=0;
wait_1sec();
RST_ESP8266=1;
// Negotiate baud rate
while(1)
{
esp8266_Send(AT); // Send "AT" string until ESP8266 sets up its baud rade
new_line();
wait_1sec(); // and gets it correctly
if (Get_response() == ESP_OK) break; // If esp8266 says "OK" on our baud rate we program can continue
}
//****************************************************//
esp8266_Send(ATE0); // Disable command echo
new_line();
Wait_response(ESP_OK);
//****************************************************//
while(1)
{
esp8266_Send(AT_RST); // Send "RST" reset module
new_line();
wait_1sec(); // and gets it correctly
if (Get_response() == ESP_READY) break; // If esp8266 says "ready" on our baud rate we program can continue
}
//****************************************************//
do
{
esp8266_Send(AT_CWMODE); // set wifi mode 1-station 2- access point 3- station+access point
new_line();
wait_1sec(); // and gets it correctly
}while(Get_response() != ESP_OK);// If esp8266 says "OK" on our baud rate we program can continue
//****************************************************//
while(1)
{
esp8266_Send(AT_CIPMUX); // Set multiple connections mode
new_line();
wait_1sec(); // and gets it correctly
if (Get_response() == ESP_OK) break; // If esp8266 says "OK" on our baud rate we program can continue
}
//****************************************************//
do { // connected with your network
//AT+CWJAP="SSID","pasword" <CR><LF>
esp8266_Send(AT_CWJAP);
UART_Wr_Ptr('"');
esp8266_Send_Ram(SSID_STA);
UART_Wr_Ptr('"');
UART_Wr_Ptr(',');
UART_Wr_Ptr('"');
esp8266_Send_Ram(password_STA);
UART_Wr_Ptr('"');
new_line();
wait_3sec();
} while(Get_Response() != ESP_OK);
//****************************************************//
do { // set parameter for access point
//AT+CWSAP="SSID","pasword" , port,port,mode, <CR><LF>
esp8266_Send(AT_CWSAP);
UART_Wr_Ptr('"');
esp8266_Send_Ram(SSID_AP);
UART_Wr_Ptr('"');
UART_Wr_Ptr(',');
UART_Wr_Ptr('"');
esp8266_Send_Ram(password_AP);
UART_Wr_Ptr('"');
UART_Wr_Ptr(',');
UART_Wr_Ptr(chanel+48);
UART_Wr_Ptr(',');
UART_Wr_Ptr(enc+48);
new_line();
wait_3sec();
} while(Get_Response() != ESP_OK);
//****************************************************//
do {
//connected with ip addrss and used UDP protocol
esp8266_Send(AT_CIPSTART);
UART_Wr_Ptr(ESP_ID+48);
UART_Wr_Ptr(',');
UART_Wr_Ptr('"');
esp8266_Send_Ram("UDP");
UART_Wr_Ptr('"');
UART_Wr_Ptr(',');
UART_Wr_Ptr('"');
esp8266_Send_Ram(IP_address);
UART_Wr_Ptr('"');
UART_Wr_Ptr(',');
esp8266_Send_Ram(port);
UART_Wr_Ptr(',');
esp8266_Send_Ram(port);
UART_Wr_Ptr(',');
UART_Wr_Ptr('2');
new_line();
wait_3sec();
} while(Get_Response() != ESP_OK);
//****************************************************//
}
========================================
من ناحيه الاستقبال البيانات
طبعا يوجد متغير داخل مكتبه اسمه esp_DataReady_received هذا يساوي 1 لما يكتمل قراءه البيانات هنا تجد كل البيانات مخزنه في مصفوفه esp8266_received_data
اما طول هذه البيانات ستجدها مخزنه في متغير موجود داخل مكتبه اسمه esp8266_len
اما ID فتجده مخزون في متغير اسمه esp8266_id
======================================
اما ارسال البيانات فيتم عن طريق داله اسمها Send_ESP8266_data هذه تحتاج منك البيانات بشكل string وعدد هذه البيانات
=======================================
في مثال ستجد اننا نعرض البيانات المستقبله وعددها ورقم ID على LCD
وكذلك في عنصر الاول فيه امر تشغيل واطفاء لاجهزه
طبعا مكتبه قابله للتحديث