TL-LED 发表于 2023-7-24 17:45

【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>&nbsp;</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 &lt;stdbool.h&gt;

#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[] =
"&lt;HTML&gt; \
&lt;head&gt;&lt;title&gt;HTTP LED Control&lt;/title&gt;&lt;/head&gt; \
&lt;center&gt; \
&lt;p&gt; \
&lt;font size=\"6\"&gt;LED&lt;font style = \"color:red\"&gt;已打开!&lt;/font&gt; \
&lt;form method=post action=\"off\" name=\"ledform\"&gt; \
&lt;input type=\"submit\" value=\"关闭\" style=\"width:80px;height:30px;\"&gt;&lt;/form&gt; \
&lt;/center&gt; \
&lt;/HTML&gt; ";

const unsigned char Led1Off_Data[] =
"&lt;HTML&gt; \
&lt;head&gt;&lt;title&gt;HTTP LED Control&lt;/title&gt;&lt;/head&gt; \
&lt;center&gt; \
&lt;p&gt; \
&lt;font size=\"6\"&gt;LED&lt;font style = \"color:red\"&gt;已关闭!&lt;/font&gt; \
&lt;form method=post action=\"on\" name=\"ledform\"&gt; \
&lt;input type=\"submit\" value=\"打开\" style=\"width:80px;height:30px;\"&gt;&lt;/form&gt; \
&lt;/center&gt; \
&lt;/HTML&gt; ";

static const char http_index_html[] =
"&lt;html&gt;&lt;head&gt;&lt;title&gt;Congrats!&lt;/title&gt;&lt;/head&gt;\
&lt;body&gt;&lt;h2 align=\"center\"&gt;RTT&amp;英飞凌PSoC6评估板 lwIP HTTP Server!&lt;/h2&gt;\
&lt;p align=\"center\"&gt;This is a small test page : http control led.&lt;/p&gt;\
&lt;p align=\"center\"&gt;&lt;a href=\"https://bbs.eeworld.com.cn/elecplay/content/fd37a7d3/\"&gt;\
&lt;font size=\"6\"&gt; RTT&amp;英飞凌PSoC6评估板 &lt;/font&gt; &lt;/a&gt;&lt;/p&gt;\
&lt;a href=\"https://bbs.eeworld.com.cn/elecplay/content/82c9e772\"&gt;\
&lt;img src=\"https://bbs.eeworld.com.cn/data/attachment/forum/202305/16/180636shdknb4w8bxdkv2d.png\"/&gt;&lt;/a&gt;\
&lt;/body&gt;&lt;/html&gt;";

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, &amp;inbuf);

   if (err == ERR_OK)
   {
         netbuf_data(inbuf, (void**)&amp;buf, &amp;buflen);
         if (buflen&gt;=5 &amp;&amp;
               buf=='G' &amp;&amp;
               buf=='E' &amp;&amp;
               buf=='T' &amp;&amp;
               buf==' ' &amp;&amp;
               buf=='/' )
         {

             httpserver_send_html(conn, led_on);
         }
         else if (buflen&gt;=8&amp;&amp;buf=='P'&amp;&amp;buf=='O'
               &amp;&amp;buf=='S'&amp;&amp;buf=='T')
         {
             if (buf=='o'&amp;&amp;buf=='n')
             {
               led_on =true;
               LED2_ON;

             }
             else if (buf=='o'&amp;&amp;buf=='f'&amp;&amp;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, &amp;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>&nbsp;</p>

<p>1.2、main.c</p>

<pre>
<code>#include &lt;rtthread.h&gt;
#include &lt;rtdevice.h&gt;

#include "drv_gpio.h"

#include "httpserver_net.h"


int main(void)
{
    httpserver_init();

    for (;;)
    {
      rt_thread_mdelay(500);
    }
}
</code></pre>

<p>&nbsp;</p>

<p><strong>二、程序运行</strong></p>

<p>&nbsp;</p>

<p>开发运行后,配置wifi用户名和密码后,输入开发板的IP地址,我这里是192.168.1.109</p>

<p></p>

<p>LED开关控制操作视频</p>

<p>f05dde59e9219ad8ec81cf35a0c57c76<br />
&nbsp;</p>

<p>&nbsp;</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>

freebsder 发表于 2023-7-25 18:51

<p>可以,这条透明胶着实亮了。</p>

TL-LED 发表于 2023-7-25 19:45

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>

Jacktang 发表于 2023-7-26 07:20

<p>胶带粘的也技术了</p>

wangerxian 发表于 2023-7-27 15:54

<p>这个网页服务器是官方的例程咯?</p>

TL-LED 发表于 2023-7-27 16:37

wangerxian 发表于 2023-7-27 15:54
这个网页服务器是官方的例程咯?

<p>这个不是官方的例程</p>
页: [1]
查看完整版本: 【RTT&英飞凌PSoC6评估板】rt-thread下网页服务器控制LED灯