【RTT&英飞凌PSoC6评估板】rt-thread下网页服务器控制LED灯
<div class='showpostmsg'> 本帖最后由 TL-LED 于 2023-7-24 22:00 编辑<p>测试下PSoC6开发板网页服务器控制板卡上的LED指示灯。</p>
<p>在<a href="https://bbs.eeworld.com.cn/thread-1250711-1-1.html" target="_blank">https://bbs.eeworld.com.cn/thread-1250711-1-1.html</a>例程的基础上,增加网页服务器功能。</p>
<p> </p>
<p><strong>一、测试代码</strong></p>
<p>1.1、httpserver_net.c</p>
<pre>
<code>#include "lwip/opt.h"
#include "lwip/arch.h"
#include "lwip/api.h"
#include "board.h"
#include <stdbool.h>
#define LED2_PIN GET_PIN(0, 1)
#define LED2_ON rt_pin_write(LED2_PIN, PIN_LOW);
#define LED2_OFF rt_pin_write(LED2_PIN, PIN_HIGH);
#if LWIP_NETCONN
#ifndef HTTPD_DEBUG
#define HTTPD_DEBUG LWIP_DBG_OFF
#endif
const static char http_html_hdr[] =
"HTTP/1.1 200 OK\r\nContent-type: text/html\r\n\r\n";
const unsigned char Led1On_Data[] =
"<HTML> \
<head><title>HTTP LED Control</title></head> \
<center> \
<p> \
<font size=\"6\">LED<font style = \"color:red\">已打开!</font> \
<form method=post action=\"off\" name=\"ledform\"> \
<input type=\"submit\" value=\"关闭\" style=\"width:80px;height:30px;\"></form> \
</center> \
</HTML> ";
const unsigned char Led1Off_Data[] =
"<HTML> \
<head><title>HTTP LED Control</title></head> \
<center> \
<p> \
<font size=\"6\">LED<font style = \"color:red\">已关闭!</font> \
<form method=post action=\"on\" name=\"ledform\"> \
<input type=\"submit\" value=\"打开\" style=\"width:80px;height:30px;\"></form> \
</center> \
</HTML> ";
static const char http_index_html[] =
"<html><head><title>Congrats!</title></head>\
<body><h2 align=\"center\">RTT&英飞凌PSoC6评估板 lwIP HTTP Server!</h2>\
<p align=\"center\">This is a small test page : http control led.</p>\
<p align=\"center\"><a href=\"https://bbs.eeworld.com.cn/elecplay/content/fd37a7d3/\">\
<font size=\"6\"> RTT&英飞凌PSoC6评估板 </font> </a></p>\
<a href=\"https://bbs.eeworld.com.cn/elecplay/content/82c9e772\">\
<img src=\"https://bbs.eeworld.com.cn/data/attachment/forum/202305/16/180636shdknb4w8bxdkv2d.png\"/></a>\
</body></html>";
static bool led_on = false;
void httpserver_send_html(struct netconn *conn, bool led_status)
{
netconn_write(conn, http_html_hdr,
sizeof(http_html_hdr)-1, NETCONN_NOCOPY);
if (led_status == true)
netconn_write(conn, Led1On_Data,
sizeof(Led1On_Data)-1, NETCONN_NOCOPY);
else
netconn_write(conn, Led1Off_Data,
sizeof(Led1Off_Data)-1, NETCONN_NOCOPY);
netconn_write(conn, http_index_html,
sizeof(http_index_html)-1, NETCONN_NOCOPY);
}
static void httpserver_serve(struct netconn *conn)
{
struct netbuf *inbuf;
char *buf;
u16_t buflen;
err_t err;
err = netconn_recv(conn, &inbuf);
if (err == ERR_OK)
{
netbuf_data(inbuf, (void**)&buf, &buflen);
if (buflen>=5 &&
buf=='G' &&
buf=='E' &&
buf=='T' &&
buf==' ' &&
buf=='/' )
{
httpserver_send_html(conn, led_on);
}
else if (buflen>=8&&buf=='P'&&buf=='O'
&&buf=='S'&&buf=='T')
{
if (buf=='o'&&buf=='n')
{
led_on =true;
LED2_ON;
}
else if (buf=='o'&&buf=='f'&&buf=='f')
{
led_on = false;
LED2_OFF;
}
httpserver_send_html(conn, led_on);
}
netbuf_delete(inbuf);
}
netconn_close(conn);
}
static void httpserver_thread(void *arg)
{
struct netconn *conn, *newconn;
err_t err;
LWIP_UNUSED_ARG(arg);
conn = netconn_new(NETCONN_TCP);
LWIP_ERROR("http_server: invalid conn", (conn != NULL), return;);
led_on = true;
LED2_ON;
netconn_bind(conn, NULL, 80);
netconn_listen(conn);
do
{
err = netconn_accept(conn, &newconn);
if (err == ERR_OK)
{
httpserver_serve(newconn);
netconn_delete(newconn);
}
}
while (err == ERR_OK);
netconn_close(conn);
netconn_delete(conn);
}
void httpserver_init()
{
rt_pin_mode(LED2_PIN, PIN_MODE_OUTPUT);
sys_thread_new("http_server_netconn",httpserver_thread, NULL, 1024, 4);
}
#endif
</code></pre>
<p> </p>
<p>1.2、main.c</p>
<pre>
<code>#include <rtthread.h>
#include <rtdevice.h>
#include "drv_gpio.h"
#include "httpserver_net.h"
int main(void)
{
httpserver_init();
for (;;)
{
rt_thread_mdelay(500);
}
}
</code></pre>
<p> </p>
<p><strong>二、程序运行</strong></p>
<p> </p>
<p>开发运行后,配置wifi用户名和密码后,输入开发板的IP地址,我这里是192.168.1.109</p>
<p></p>
<p>LED开关控制操作视频</p>
<p>f05dde59e9219ad8ec81cf35a0c57c76<br />
</p>
<p> </p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> <p>可以,这条透明胶着实亮了。</p>
freebsder 发表于 2023-7-25 18:51
可以,这条透明胶着实亮了。
<p>拿不住,胶带粘了<img height="48" src="https://bbs.eeworld.com.cn/static/editor/plugins/hkemoji/sticker/facebook/lol.gif" width="48" /></p>
<p>胶带粘的也技术了</p>
<p>这个网页服务器是官方的例程咯?</p>
wangerxian 发表于 2023-7-27 15:54
这个网页服务器是官方的例程咯?
<p>这个不是官方的例程</p>
页:
[1]