add http read
parent
9faf03daf0
commit
28410daead
@ -1,2 +1,3 @@
|
||||
idf_component_register(SRCS "main.c" "font.c" "display.c" "text.c" "wlan.c"
|
||||
idf_component_register(SRCS "main.c" "font.c" "display.c" "text.c" "wlan.c" "http.c"
|
||||
REQUIRES esp_driver_gpio esp_wifi nvs_flash esp_timer
|
||||
INCLUDE_DIRS "")
|
||||
|
||||
@ -0,0 +1,81 @@
|
||||
#include "http.h"
|
||||
#include "esp_err.h"
|
||||
#include "esp_log.h"
|
||||
|
||||
#include "lwip/err.h"
|
||||
#include "lwip/sockets.h"
|
||||
#include "lwip/sys.h"
|
||||
#include "lwip/netdb.h"
|
||||
#include "lwip/dns.h"
|
||||
|
||||
static const char *TAG = "http";
|
||||
|
||||
static const char *REQUEST = "GET " WEB_PATH " HTTP/1.0\r\n"
|
||||
"Host: "WEB_SERVER":"WEB_PORT"\r\n"
|
||||
"User-Agent: esp-idf/1.0 esp32\r\n"
|
||||
"\r\n";
|
||||
|
||||
esp_err_t http_request(char* buf)
|
||||
{
|
||||
const struct addrinfo hints = {
|
||||
.ai_family = AF_INET,
|
||||
.ai_socktype = SOCK_STREAM,
|
||||
};
|
||||
struct addrinfo *res;
|
||||
struct in_addr *addr;
|
||||
int s, r;
|
||||
|
||||
int err = getaddrinfo(WEB_SERVER, WEB_PORT, &hints, &res);
|
||||
|
||||
if(err != 0 || res == NULL) {
|
||||
ESP_LOGE(TAG, "DNS lookup failed err=%d res=%p", err, res);
|
||||
return ESP_ERR_NOT_FOUND;
|
||||
}
|
||||
|
||||
/* Code to print the resolved IP.
|
||||
* Note: inet_ntoa is non-reentrant, look at ipaddr_ntoa_r for "real" code */
|
||||
addr = &((struct sockaddr_in *)res->ai_addr)->sin_addr;
|
||||
ESP_LOGI(TAG, "DNS lookup succeeded. IP=%s", inet_ntoa(*addr));
|
||||
|
||||
s = socket(res->ai_family, res->ai_socktype, 0);
|
||||
if(s < 0) {
|
||||
ESP_LOGE(TAG, "... Failed to allocate socket.");
|
||||
freeaddrinfo(res);
|
||||
return -1;
|
||||
}
|
||||
ESP_LOGI(TAG, "... allocated socket");
|
||||
|
||||
if(connect(s, res->ai_addr, res->ai_addrlen) != 0) {
|
||||
ESP_LOGE(TAG, "... socket connect failed errno=%d", errno);
|
||||
close(s);
|
||||
freeaddrinfo(res);
|
||||
return -1;
|
||||
}
|
||||
|
||||
ESP_LOGI(TAG, "... connected");
|
||||
freeaddrinfo(res);
|
||||
|
||||
if (write(s, REQUEST, strlen(REQUEST)) < 0) {
|
||||
ESP_LOGE(TAG, "... socket send failed");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
ESP_LOGI(TAG, "... socket send success");
|
||||
|
||||
struct timeval receiving_timeout;
|
||||
receiving_timeout.tv_sec = 5;
|
||||
receiving_timeout.tv_usec = 0;
|
||||
if (setsockopt(s, SOL_SOCKET, SO_RCVTIMEO, &receiving_timeout,
|
||||
sizeof(receiving_timeout)) < 0) {
|
||||
ESP_LOGE(TAG, "... failed to set socket receiving timeout");
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
ESP_LOGI(TAG, "... set socket receiving timeout success");
|
||||
|
||||
/* Read HTTP response */
|
||||
r = read(s, buf, RCV_BUFSIZE);
|
||||
if(r >= RCV_BUFSIZE)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
@ -1 +1 @@
|
||||
void wifi_init_sta(void);
|
||||
void wlan_init(void);
|
||||
|
||||
Loading…
Reference in New Issue