[其他ST产品] lwip接收文件 stm32_LwIP+ STM32+HTTP例程参考

[复制链接]
511|5
 楼主| 等你下课 发表于 2023-1-15 19:23 | 显示全部楼层 |阅读模式
  1. #include

  2. #include

  3. #include

  4. #include

  5. #include

  6. // Http请求内容

  7. static const char send_data[] =

  8. "GET /v1.0/device/1949/sensor/2511/datapoints HTTP/1.1\r\n"

  9. "U-ApiKey:[your apikey]\r\n"

  10. "Host: api.yeelink.net\r\n\r\n";

  11. void tcpclient(const char* host_name, int port)

  12. {

  13. (void)port;

  14. char *recv_data;

  15. int sock, bytes_received;

  16. struct hostent *yeelink_host;

  17. struct in_addr yeelink_ipaddr;

  18. struct sockaddr_in yeelink_sockaddr;

  19. recv_data = rt_malloc(1024);

  20. if (recv_data == RT_NULL)

  21. {

  22. rt_kprintf("No memory\r\n");

  23. return;

  24. }


评论

———————————————— 版权声明:本文为CSDN博主「weixin_39575047」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/weixin_39575047/article/details/111497555  发表于 2023-1-15 19:23
 楼主| 等你下课 发表于 2023-1-15 19:24 | 显示全部楼层
  1. // 第一步 DNS地址解析

  2. rt_kprintf("calling gethostbyname with: %s\r\n", host_name);

  3. yeelink_host = gethostbyname(host_name);

  4. yeelink_ipaddr.s_addr = *(unsigned long *) yeelink_host->h_addr_list[0];

  5. rt_kprintf("Yeelink IP Address:%s\r\n" , inet_ntoa(yeelink_ipaddr));

  6. yeelink_sockaddr.sin_family = AF_INET;

  7. yeelink_sockaddr.sin_port = htons(80);

  8. yeelink_sockaddr.sin_addr = yeelink_ipaddr;

  9. rt_memset(&(yeelink_sockaddr.sin_zero), 0, sizeof(yeelink_sockaddr.sin_zero));

  10. while(1)

  11. {
 楼主| 等你下课 发表于 2023-1-15 19:26 | 显示全部楼层
  1. // 第二步 创建套接字

  2. if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)

  3. {

  4. rt_kprintf("Socket error\n");

  5. rt_free(recv_data);

  6. return;

  7. }
 楼主| 等你下课 发表于 2023-1-15 19:27 | 显示全部楼层
  1. // 第三步 连接yeelink

  2. if (connect(sock, (struct sockaddr *)&yeelink_sockaddr, sizeof(struct sockaddr)) == -1)

  3. {

  4. rt_kprintf("Connect fail!\n");

  5. lwip_close(sock);

  6. rt_free(recv_data);

  7. return;

  8. }
 楼主| 等你下课 发表于 2023-1-15 19:27 | 显示全部楼层
// 第4步 发送Http请求

send(sock,send_data,strlen(send_data), 0);

// 第5步 获得Http响应

bytes_received = recv(sock, recv_data, 1024 - 1, 0);

recv_data[bytes_received] = '\0';

// 响应内容为 {"timestamp":"2013-11-19T08:50:11","value":1}

// 截取“value”之后的内容

char* actuator_info = rt_strstr( recv_data , "\"value\"");

int offset = rt_strlen("\"value\":");

actuator_status = *(actuator_info + offset);

rt_kprintf("actuator status :%c\r\n",actuator_status);

// 获得开关状态,并设置LED指示灯

char actuator_status;

(actuator_status == '1')?rt_hw_led_on(0):rt_hw_led_off(0);

rt_memset(recv_data , 0 , sizeof(recv_data));

// 关闭套接字

closesocket(sock);

// 延时5S之后重新连接

rt_thread_delay( RT_TICK_PER_SECOND * 5 );

}

}
作者:Lolwuj

来源:CSDN

原文:https://blog.csdn.net/mikewu_helloworld/article/details/52769650

版权声明:本文为博主原创文章,转载请附上博文链接!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

54

主题

538

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部