乐鑫技术交流
直播中

敷衍作笑谈

10年用户 1023经验值
擅长:制造/封装 连接器 光电显示 接口/总线/驱动 RF/无线
私信 关注
[问答]

如何使用RTOS SDK 2.1.0从esp8266发送http请求?

我需要从我的 esp8266 向 Shelly 插头发出 http 请求才能打开它。如何使用 RTOS SDK 2.1.0 从我的 esp8266 发送 http 请求?

请求网址:http://{shellyplug-ip}/relay/0?turn=on

回帖(1)

h1654155598.0450

2024-7-9 16:01:54
要使用ESP8266的RTOS SDK 2.1.0发送HTTP请求,您可以按照以下步骤操作:
1. 确保您已安装ESP8266 RTOS SDK 2.1.0。
2. 创建一个新的项目并设置您的开发环境。
3. 将以下代码添加到您的主应用程序文件中(例如:main.c):
```c
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "FreeRTOS.h"
#include "task.h"
#include "lwip/sockets.h"
#include "lwip/sys.h"
#include "lwip/api.h"
#include
static const char *shelly_plug_ip = "YOUR_SHELLY_PLUG_IP";
static const char *relay_command = "/relay/0?turn=on";
void http_request_task(void *pvParameters)
{
    char *get_request = (char *)malloc(256);
    sprintf(get_request, "GET %s HTTP/1.1rnHost: %srnConnection: closernrn", relay_command, shelly_plug_ip);
    struct sockaddr_in server_addr;
    int sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock != -1)
    {
        server_addr.sin_family = AF_INET;
        server_addr.sin_port = htons(80);
        server_addr.sin_addr.s_addr = inet_addr(shelly_plug_ip);
        if (connect(sock, (struct sockaddr *)&server_addr, sizeof(server_addr)) == 0)
        {
            write(sock, get_request, strlen(get_request));
            free(get_request);
            char receive_buffer[1024];
            int bytes_received = recv(sock, receive_buffer, sizeof(receive_buffer) - 1, 0);
            if (bytes_received > 0)
            {
                receive_buffer[bytes_received] = '';
                printf("Response: %sn", receive_buffer);
            }
        }
        close(sock);
    }
    vTaskDelete(NULL);
}
void main()
{
    sys_init();
    xTaskCreate(http_request_task, "HTTP Request Task", 512, NULL, 2, NULL);
    vTaskStartScheduler();
}
```
4. 将`YOUR_SHELLY_PLUG_IP`替换为您的Shelly插头的IP地址。
5. 编译并上传代码到您的ESP8266。
6. 重置ESP8266以运行程序。
此代码将创建一个任务,该任务向您的Shelly插头发送HTTP GET请求以打开它。请注意,此示例使用阻塞的socket API,可能不是RTOS应用程序的最佳选择。您可能需要考虑使用非阻塞API或单独的任务来处理网络通信,以避免阻塞主任务。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分