色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ESP8266模組的HTTP編程

CHANBAEK ? 來源:嵌入式攻城獅 ? 作者:安迪西 ? 2023-04-19 11:20 ? 次閱讀

ESP8266 模組的 HTTP 編程

超文本傳輸協議(HTTP)是一種通信協議,它允許將超文本標記語言文檔從Web服務器傳送到客戶端瀏覽器; HTTP是一個屬于應用層面向對象的協議,由于其簡捷、決速的方式,適用于分布式超媒體信息系統

超文本是包含有超鏈接和各種多媒體元素標記的文本。 這些超文本文件彼此鏈接,形成網狀(Web),因此又被稱為網頁(Web Page)。 這些鏈接使用URL表示。 最常見的超文本格式是超文本標記語言HTML

圖片

URL即統一資源定位符(Uniform Resource Locator),用來唯一地標識萬維網中的某一個文檔。 URL由協議、主機和端口(默認為80)以及文件名三部分構成。 如:

圖片

HTTP工作原理如下圖示

圖片

HTTP報文結構:

請求報文:即從客戶端(瀏覽器)向Web服務器發送的請求報文。 報文的所有字段都是ASCII碼

圖片

響應報文:即從Web服務器到客戶端(瀏覽器)的應答。 報文的所有字段都是ASCII碼

圖片

請求方法:請求報文中的方法,是對所請求對象所進行的操作,也就是一些命令

圖片

下面將介紹如何使用 ESP8266 SDK開發 HTTP通信的客戶端和服務端

1. HTTP Client 編程

HTTP Client 要實現的功能:

  • 模擬http協議,訪問百度首頁:
    www.baidu.com/index.html
  • 串口打印出百度返回的數據

HTTP Client 任務流程如下示:

圖片

實現步驟如下:

在ESP8266_RTOS_SDK目錄下新建 httpclient文件夾,把 station實驗中的 station目錄下所有文件拷貝到該文件夾中

在 user目錄下新建 httpclient.c文件,并添加如下代碼

/*******************httpclient.c************************************/
constchar GetStr[]="GET /index.html HTTP/1.1\\r\\n"
"Host: www.baidu.com\\r\\n"
"\\r\\n";
#define HTTP_RCV_LEN 50000
voidATaskHttpClient(void*pvParameters ){
int iVariableExample =0;
int fd =-1;
int NetTimeOnt =20000;
int ret;
int i;
structhostent*phostent;
structsockaddr_in ServerAddr;
char*Httpmsg;
char*ipaddr =NULL;
  STATION_STATUS StaStatus;
do{
    StaStatus =wifi_station_get_connect_status();
vTaskDelay(100);
}while(StaStatus != STATION_GOT_IP);

  fd =socket(PF_INET,SOCK_STREAM,0);
if(fd ==-1){
printf("get socket fail!\\n");
vTaskDelete(NULL);
return;
}

setsockopt(fd,SOL_SOCKET,SO_RCVTIMEO,&NetTimeOnt,sizeof(int));
  phostent =gethostbyname("www.baidu.com");
if(phostent ==NULL){
printf("get host ip fail!\\n");
vTaskDelete(NULL);
return;
}
else{
for(i =0;phostent->h_addr_list[i];i++){
      ipaddr =inet_ntoa(*(structin_addr*)(phostent->h_addr_list[i]));
if(ipaddr !=NULL){
printf("host addr is:%s\\n",  ipaddr );
break;
}
}
if(ipaddr ==NULL){
printf("error:get ip fail!\\r\\n");
vTaskDelete(NULL);
return;
}
}
memset(&ServerAddr,0,sizeof(ServerAddr));
  ServerAddr.sin_family = AF_INET;
  ServerAddr.sin_addr.s_addr =inet_addr(ipaddr);
  ServerAddr.sin_port =htons(80);
  ServerAddr.sin_len =sizeof(ServerAddr);

do{
    ret =connect(fd,(structsockaddr*)&ServerAddr,ServerAddr.sin_len);
if(ret !=0){
printf("connect is fail!\\n");
vTaskDelay(100);
}
}while(ret !=0);

  Httpmsg =zalloc(HTTP_RCV_LEN);
send(fd,GetStr,strlen(GetStr),0);
for(;;){
do{
      ret =recv(fd,Httpmsg,50000,0);
if(ret >0){
printf("%s",Httpmsg);
}else{
printf("HttpServer data is no!\\n");
}
}while(ret ==-1);
}
free(Httpmsg);
vTaskDelete(NULL);
}
//HttpClient_init 初始化
voidHttpClient_init(void){
xTaskCreate(ATaskHttpClient,"HttpClient",256,NULL,4,NULL);
}

在 include目錄下新建 httpclient.h文件,并添加聲明

void ATaskHttpClient(void *pvParameters);
void HttpClient_init(void);

在 user_main.c文件中的 user_init()函數下添加如下代碼

#define SSID "Hotspot"	//ESP8266要加入的無線網
#define PASSWORD "88888888"
void ICACHE_FLASH_ATTR
user_init(void){
printf("SDK version:%s\\n",system_get_sdk_version());
Led_init();
wifi_set_opmode(STATION_MODE);
structstation_config*config =(structstation_config*)\\
zalloc(sizeof(structstation_config));
sprintf(config->ssid,SSID);
sprintf(config->password,PASSWORD);
wifi_station_set_config(config);
free(config);
wifi_station_set_auto_connect(TRUE);
HttpClient_init();
xTaskCreate(ATaskLed,"LED",256,NULL,2,NULL);
}

在ESP8266編譯器中編譯完成,燒寫 bin文件到 ESP8266,打開串口助手,即可接收到百度服務器返回的數據

圖片

2. HTTP Server 編程

HTTP Server 要實現的功能:

  • 模擬httpserver等待網頁訪問
  • PC訪問網頁,查看網頁信息

HTTP Server 任務流程如下示:

圖片

實現步驟如下:

在ESP8266_RTOS_SDK目錄下新建 httpserver文件夾,把 station實驗中的 station目錄下所有文件拷貝到該文件夾中

在 user目錄下新建 httpserver.c文件,并添加如下代碼

/*******************httpserver.c******************************************/
#defineSERVERADDR"192.168.191.29"//esp8266連上WiFi后的IP地址
#define SERVERPORT 8000
//ATaskHttpServer任務
constchar*DefaultPage=
""
""
""
"歡迎進入html世界"
""
""
"歡迎關注微信公眾號:andyxi_linux"
""
"";

// 發送200 ok報頭
intfile_ok(int cfd,long flen){
char*send_buf =zalloc(sizeof(char)*100);
sprintf(send_buf,"HTTP/1.1 200 OK\\r\\n");
send(cfd, send_buf,strlen(send_buf),0);
sprintf(send_buf,"Connection: keep-alive\\r\\n");
send(cfd, send_buf,strlen(send_buf),0);
sprintf(send_buf,"Content-Length: %ld\\r\\n", flen);
send(cfd, send_buf,strlen(send_buf),0);
sprintf(send_buf,"Content-Type: text/html\\r\\n");
send(cfd, send_buf,strlen(send_buf),0);
sprintf(send_buf,"\\r\\n");
send(cfd, send_buf,strlen(send_buf),0);
free(send_buf);
return0;
}
//ATaskHttpServer 任務
voidATaskHttpServer(void*pvParameters ){
int iVariableExample =0;
int fd =-1;
int cfd =-1;
int NetTimeOnt =2000;
int ret;
structsockaddr_in ServerAddr;
structsockaddr ClientAddr;
socklen_t ClientAddrlen =sizeof(structsockaddr);
char*Httpmsg;
char*Sendmsg;

  STATION_STATUS StaStatus;
do{
    StaStatus =wifi_station_get_connect_status();
vTaskDelay(100);
}while(StaStatus != STATION_GOT_IP);

  fd =socket(PF_INET,SOCK_STREAM,0);
if(fd ==-1){
printf("get socket fail!\\n");
vTaskDelete(NULL);
return;
}

setsockopt(fd,SOL_SOCKET,SO_RCVTIMEO,&NetTimeOnt,sizeof(int));
memset(&ServerAddr,0,sizeof(ServerAddr));
  ServerAddr.sin_family = AF_INET;
  ServerAddr.sin_addr.s_addr = INADDR_ANY;
  ServerAddr.sin_port =htons(SERVERPORT);
  ServerAddr.sin_len =sizeof(ServerAddr);

if(bind(fd,(structsockaddr*)&ServerAddr,ServerAddr.sin_len)!=0){
printf("bind socket fail!\\n");
vTaskDelete(NULL);
return;
}

if(listen(fd,5)!=0){
printf("listen socket fail!\\n");
vTaskDelete(NULL);
return;
}
  Httpmsg =(char*)zalloc(sizeof(char)*1000);
for(;;){
    cfd =accept(fd,&ClientAddr,&ClientAddrlen);
if(cfd !=-1){
printf("HttpClient accept\\n");
      ret =recv(cfd,Httpmsg,1000,0);
if(ret >0){
printf("HttpClient recv\\n");
printf("%s\\n",Httpmsg);
file_ok(cfd,strlen(DefaultPage));
send(cfd,DefaultPage,strlen(DefaultPage),0);
}else{
printf("HttpClient data is no!\\n");
}
}
close(cfd);
}
free(Httpmsg);
vTaskDelete(NULL);
}
//HttpServer_init 初始化
voidHttpServer_init(void){
xTaskCreate(ATaskHttpServer,"HttpServer",256,NULL,4,NULL);
}

在 include目錄下新建 httpserver.h文件,并添加聲明

void ATaskHttcpserver( void *pvParameters );
void Httpserver_init(void);

在 user_main.c文件中的 user_init()函數下添加如下代碼

#define SSID "Hotspot"	//PC端和ESP8266要加入的無線網
#define PASSWORD "88888888"	
void ICACHE_FLASH_ATTR
user_init(void){
  printf("SDK version:%s\\n", system_get_sdk_version());
  Led_init();
  wifi_set_opmode(STATION_MODE);
  struct station_config *config = (struct station_config *)\\
        zalloc(sizeof(struct station_config));
  sprintf(config->ssid,SSID);
  sprintf(config->password,PASSWORD);
  wifi_station_set_config(config);
  free(config);
  wifi_station_set_auto_connect(TRUE);    
  HttpServer_init();
  xTaskCreate(ATaskLed, "LED", 256, NULL, 2, NULL);
}

在ESP8266編譯器中編譯完成,燒寫 bin文件到 ESP8266,確保 PC與 ESP8266在同一個網絡中,模組復位后,在瀏覽器中輸入 ESP8266的 IP地址(192.168.191.29),即可訪問到 ESP8266返回的網頁信息(如下圖示)

圖片

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 通信協議
    +關注

    關注

    28

    文章

    922

    瀏覽量

    40583
  • Web
    Web
    +關注

    關注

    2

    文章

    1275

    瀏覽量

    70014
  • 服務器
    +關注

    關注

    12

    文章

    9425

    瀏覽量

    86494
  • 編程
    +關注

    關注

    88

    文章

    3649

    瀏覽量

    94345
  • ESP8266
    +關注

    關注

    50

    文章

    963

    瀏覽量

    45849
收藏 人收藏

    評論

    相關推薦

    ESP8266_SDK_編程手冊_Version 1.5

    ESP8266__SDK__Programming Guide,非OS SDK編程手冊,基于esp_iot_sdk_v1.5.0
    發表于 12-30 14:26 ?580次下載

    ESP8266中文版SDK編程手冊

    2A-ESP8266__IOT_SDK_User_Manual SDK使用手冊 2B-ESP8266__SDK__IOT_Demo 2C-ESP8266__SDK__Programming Guide SDK
    發表于 12-30 14:48 ?0次下載

    ESP8266_SDK編程手冊

    樂鑫官方esp8266編程指南,中文版,比較詳盡
    發表于 03-24 14:50 ?56次下載

    Ardnino的ESP8266編程源碼

    這是采用Ardniuo for ESP8266 IDE 編寫的ESP8266編程,簡單實現WIFI串口通訊,讓51單片機不用在寫AT指令的編程。 可以通過電腦串口調試查看信息,不過
    發表于 12-04 11:54 ?10次下載

    ESP8266 SDK 編程手冊

    ESP8266 SDK 編程手冊Version 1.0.1
    發表于 12-11 17:05 ?50次下載

    機智云ESP8266模組固件資料下載

    機智云ESP8266模組固件
    發表于 04-23 15:55 ?67次下載
    機智云<b class='flag-5'>ESP8266</b><b class='flag-5'>模組</b>固件資料下載

    ESP8266硬件設計指南的詳細資料免費下載

    本手冊提供了 ESP8266EX 系列的產品信息,包括 ESP8266EX 芯片,配置 ESP8266EX 芯片的 ESP-LAUNCHER 開發板,以及
    發表于 03-15 08:00 ?34次下載
    <b class='flag-5'>ESP8266</b>硬件設計指南的詳細資料免費下載

    ESP8266模塊的的硬件設計指南資料免費下載

    本手冊提供了ESP8266EX 系列的產品信息,包括 ESP8266EX 芯片,配置 ESP8266EX 芯片的 ESP-LAUNCHER 開發板,以及
    發表于 03-18 08:00 ?47次下載
    <b class='flag-5'>ESP8266</b>模塊的的硬件設計指南資料免費下載

    ESP8266 WiFi模組的改進文件免費下載

    本文檔的主要內容詳細介紹的是ESP8266 WiFi模組的改進文件免費下載。
    發表于 12-18 08:00 ?15次下載

    ESP8266 Nodemcu學習心得②

    服務器響應http請求的端口號,網絡服務器標準http端口號為80,因此這里使用80為端口號esp8266_server.begin(); // 啟動網絡服務功能esp8266_se
    發表于 10-25 11:36 ?14次下載
    <b class='flag-5'>ESP8266</b> Nodemcu學習心得②

    簡單的ESP32和ESP8266編程

    電子發燒友網站提供《簡單的ESP32和ESP8266編程器.zip》資料免費下載
    發表于 07-22 09:43 ?7次下載
    簡單的<b class='flag-5'>ESP</b>32和<b class='flag-5'>ESP8266</b><b class='flag-5'>編程</b>器

    如何使用Arduino UNO對ESP8266進行編程

    電子發燒友網站提供《如何使用Arduino UNO對ESP8266進行編程.zip》資料免費下載
    發表于 12-16 10:13 ?3次下載
    如何使用Arduino UNO對<b class='flag-5'>ESP8266</b>進行<b class='flag-5'>編程</b>

    ESP8266編程盾開源

    電子發燒友網站提供《ESP8266編程盾開源.zip》資料免費下載
    發表于 02-02 14:25 ?1次下載
    <b class='flag-5'>ESP8266</b><b class='flag-5'>編程</b>盾開源

    使用Arduino編程ESP8266 ESP 01

    電子發燒友網站提供《使用Arduino編程ESP8266 ESP 01.zip》資料免費下載
    發表于 02-07 14:30 ?8次下載
    使用Arduino<b class='flag-5'>編程</b><b class='flag-5'>ESP8266</b> <b class='flag-5'>ESP</b> 01

    ESP8266硬件

    目前市面上有關ESP8266模組有很多的種類,但是都是使用的樂鑫公司開發的ESP8266的wifi模組,而且種類也很多。
    的頭像 發表于 02-10 14:25 ?5057次閱讀
    <b class='flag-5'>ESP8266</b>硬件
    主站蜘蛛池模板: 久久成人a毛片免费观看网站 | 亚洲色图在线观看视频 | 野花高清影视免费观看 | 日本午夜精品一区二区三区电影 | 天天射天天干天天插 | 国产人妻777人伦精品HD | 亚洲色图激情文学 | 亚洲成人日韩 | 免费观看国产视频 | 少妇无码太爽了视频在线播放 | 动漫美女和男人下载 | 亚洲国产免费观看视频 | 果冻传媒最新视频在线观看 | 印度最猛性ⅹxxxxx | 亚洲成AV人片一区二区不卡 | 青柠在线观看视频在线高清完整 | 久久这里只精品热在线99 | 国产一卡 二卡三卡四卡无卡乱码视频 | 蜜臀AV99无码精品国产专区 | 国产成人精品精品欧美 | 色橹橹欧美在线观看视频高 | 中文字幕高清在线观看 | 色欲国产麻豆精品AV免费 | 羞羞影院男女爽爽影院尤物 | 国产综合18久久久久久软件 | 亚洲AV永久无码精品老司机蜜桃 | 亚洲一区在线观看视频 | 美国特级成人毛片 | 午夜免费福利片 | 视频一区精品自拍亚洲 | 热久久视久久精品18 | 99热久久这里只有精品视频 | 99久久国产极品蜜臀AV酒店 | 欧美老少欢杂交另类 | 伊人久久大香线蕉综合亚洲 | 成年人在线免费观看视频网站 | 99热在线视频这里只精品 | 国产精品久久婷婷五月色 | 欧美九十老太另类 | 國產麻豆AVMDXMDX | 免费看黄软件 |