女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

OK-MX93開發板-實現Web頁面無線點燈

碼農愛學習 ? 來源:碼農愛學習 ? 作者:碼農愛學習 ? 2023-04-21 10:37 ? 次閱讀

上篇文章,介紹了OK-MX9352開發板的基礎硬件功能。

本篇來使用OK-MX9352開發板,通過Web界面進行點燈測試,最終的效果如下:

在進行代碼編寫之前,先在Ubuntu虛擬機上把這個板子的交叉編譯環境配置好。

1 交叉編譯環境配置

1.1 OKMX93 SDK源碼拷貝與解壓

將壓縮包(OKMX93-linux-sdk.tar.bz2.00和OKMX93-linux-sdk.tar.bz2.01)拷貝到自己的Ubuntu虛擬機中。

sdk_md5sum.txt是對應的md5信息,也拷貝一下。使用md5sum指令確認壓縮包的md5信息是否正確,以驗證壓縮包是否完整。

xxpcb@ubuntuTest:~/myTest/ok-mx93/sourcecode$ md5sum OKMX93-linux-sdk.tar.bz2.0*
8ce38d0ab6cc754b2c0d9c232e1d0a4e  OKMX93-linux-sdk.tar.bz2.00
7733d956ae8121699fb25b94e61dde3f  OKMX93-linux-sdk.tar.bz2.01

然后使用如下指令解壓:

sudo cat OKMX93-linux-sdk.tar.bz2.0* | sudo tar xj

解壓需要一些時間,解壓后如下:

1.2 交叉編譯工具鏈的安裝

再新建一個文件夾,將解壓后SDK源碼中tools中的fsl-imx-xwayland-glibc-x86_64-meta-toolchain-qt6-armv8a-imx93-11x11-lpddr4x-evk-toolchain-5.15-kirkstone.sh拷貝到自己的文件夾中,然后執行該腳本進行交叉編譯工具鏈的安裝。

安裝過程如下:

安裝信息的第一行要選擇SDK的安裝目錄,回車默認即可,接著再輸入Y確認,然后是輸入自己虛擬機的用戶密碼,就開始安裝了。

看到打印****SDK has been successfully set up and is ready to be used表示安裝成功。

最后的信息是說明如何設置編譯環境:每次打開一個新的shell進行交叉編譯時,需要使用如下指令進行環境變量的設置:

. /opt/fsl-imx-xwayland/5.15-kirkstone/environment-setup-armv8a-poky-linux

設置好之后,可以使用 $CC -v顯示gcc版本確認環境變量是否設置成功,如下:

1.3 helloword程序測試

hello.c

#include 
?
int main()
{
printf("hello ok-mx93\\n");
return 0;
}

Makefile

TARGET=hello
?
OBJS=hello.o
?
CFLAGS+=-c -Wall -g
?
$(TARGET):$(OBJS)
$(CC) $^ -o $@ 
?
%.o:%.c
$(CC) $^ $(CFLAGS) -o $@
?
clean:
$(RM) *.o $(TARGET) -r

執行make編譯

也可以執行使用指令進行編譯:

$CC hello.c -o hello

然后將編譯的可執行文件復制到板子中,可以使用ssh命令:

scp hello root@192.168.5.115:/home/mytest

復制成功之后可在板子上運行,查看打印結果

2 Web頁面點燈代碼

嵌入式開發板,Web頁面點燈的基本原理是:在開發板上配置Web服務器,然后在指定的文件位置,放置如html等類型的網頁文件,然后板子連網,用電腦的瀏覽器輸入板子的IP地址,連接到開發板的Web服務,實現開發板中網頁內容的展示。

對于網頁中內容或操作按鈕等功能,要與開發板進行數據交互,通常使用CGI(Common Gateway Interface,公共網關接口)的方式進行編程

2.1 lighttpd配置修改

OK-MX9352開發板中已經配置了lighttpd這個Web服務器,為了便于自己測試,可以修改其配置文件

/etc/lighttpd/lighttpd.conf

比如我這里把存放Web頁面的默認位置更改為了/www/pages

另外,對應cgi的配置,還需要增加227行這句,否則cgi執行可能不能正常運行

2.2 Web頁面設計

這里使用html語言設計一個LED的控制界面。

OK-MX9352開發板上有兩個可以控制的LED,一個位于核心板上,另一個位于底板上,在設置html時,可以使用select功能實現一個下拉選項,選擇要控制的LED。

另外,LED也有多種控制模式,如基礎的開關模式(設置開,或關),心跳燈模式,定時器模式(設置亮的時間和滅的時間),也使用下拉選項的方式。

選擇不同的控制模式后,為了能動態展示不同模式下的操作功能,比如開關模式下需要顯示開和關的按鈕,心跳燈模式則不需要額外的配置,定時器模式則需要兩個輸入框來設置亮的時間和滅的時間。這里使用script功能,來實現此功能,通過讀取網頁中當前LED模式的值,來進行對應控件的顯示或隱藏。

完整的html代碼如下,led.html:

<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
    <title>led control<span class="hljs-name"title>
    <span class="hljs-name"head>

    <body background="background.png"       
        style="background-repeat:no-repeat;       
        background-size:100% 100%;                     
        background-attachment: fixed;">  
    
    <center><br><br><br><br>
    <h1 align="center">基于飛凌OK-MX9352的web控制LED燈<span class="hljs-name"h1>
     
    <form action="led.cgi" method="get">  
        <p align="center">LED選擇:
        <select name="led_id">
            <option value="LED0" selected>核心板LED<span class="hljs-name"option>
            <option value="LED1">底板LED<span class="hljs-name"option>
        <span class="hljs-name"select><span class="hljs-name"p>
        <p align="center">模式選擇:
        <select name="led_mode" onclick="select_event(this.options[this.selectedIndex].value);">
            <option value="ONOFF" selected>開關模式<span class="hljs-name"option>
            <option value="HEARTBEAT">心跳燈模式<span class="hljs-name"option>
            <option value="TIMER">定時器燈模式<span class="hljs-name"option>
        <span class="hljs-name"select><span class="hljs-name"p>
        <p align="center" id = "id_led_time_on" >亮時間:<input type="text" value=500 name="led_time_on"/><span class="hljs-name"p>
        <p align="center" id = "id_led_time_off" >滅時間:<input type="text" value=500 name="led_time_off"/><span class="hljs-name"p>
        <p align="center" id = "id_led_onoff">LED開關:
            <input type="radio" name="led_val" value="ON" checked><input type="radio" name="led_val" value="OFF"><span class="hljs-name"p><br><br>
        <p align="center">
            <input type="submit" value="確認"/>        
            <input type="reset" value="返回"/>
        <span class="hljs-name"p>
    <span class="hljs-name"form>
    <span class="hljs-name"center>
?
    <script>
        document.getElementById("id_led_time_on").style.display = "none";
        document.getElementById("id_led_time_off").style.display = "none";
    <span class="hljs-name"script>
    <script>
        function select_event(value) 
        {
            document.getElementById("id_led_onoff").style.display = "none";
            document.getElementById("id_led_time_on").style.display = "none";
            document.getElementById("id_led_time_off").style.display = "none";
            if (value === "ONOFF") 
            {
                document.getElementById("id_led_onoff").style.display = "";
            } 
            else if (value === "TIMER") 
            {
                document.getElementById("id_led_time_on").style.display = "";
                document.getElementById("id_led_time_off").style.display = "";
            }
        }
    class="hljs-name"script>
    
    

可以先使用瀏覽器直接打開這個html文件查看效果,實際效果如下:

2.3 CGI程序設計

CGI是Web服務器主機提供信息服務的標準接口。

通過CGI接口,Web服務器可以獲取網頁客戶端提交的信息,轉交給服務器端的CGI程序進行處理,最后返回結果給客戶端。

CGI程序可以使用多種語言來實現,對于嵌入式開發,那就用熟悉的C語言來編寫吧。

編寫CGI程序,需要用到CGI的庫,下載地址: https://github.com/boutell/cgic,只需要用到cgic.c和cgic.h這兩個文件。

本次測試的LED點燈功能,CGI程序需要實現的,就是獲取網頁上的用戶操作信息,然后控制板子上的LED進行對應模式的亮滅,完整的代碼實現如下,led.c:

#include "cgic.h"
#include 
#include 
?
// cgic程序以cgiMain作為入口點, cgic的函數庫會自動把cgiMain連接到相應的main()上去
int cgiMain() 
{ 
    char led_id[10];
    char led_mode[10]; 
    char led_val[10];
    int led_time_on;
    int led_time_off; 
    cgiFormString("led_id",  led_id, 10);
    cgiFormString("led_mode",  led_mode, 10); 
    cgiFormString("led_val",  led_val, 10);     
    cgiFormInteger("led_time_on",  &led_time_on, -1);
    cgiFormInteger("led_time_off",  &led_time_off, -1);
    
    // 設定輸出的內容格式 這里我們要輸出HTML
    cgiHeaderContentType("text/html;charset=\"UTF-8\"");         
    fprintf(cgiOut,"LED Web Control");   
    fprintf(cgiOut,"");
    fprintf(cgiOut,"
");
    fprintf(cgiOut,"
");
    fprintf(cgiOut,"
");
    fprintf(cgiOut,"OK-MX93開發板從Web頁面收到數據:");
    fprintf(cgiOut,"led_id: %s", led_id);
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"led_mode: %s", led_mode);
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"led_val: %s", led_val);
    fprintf(cgiOut,"
");     
    fprintf(cgiOut,"led_time_on: %d", led_time_on);
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"led_time_off: %d", led_time_off);
    fprintf(cgiOut,"
"); 
?
    int ret = 0;
    
    if (0==strncmp("ONOFF",led_mode,10))
    {
        if (0==strncmp("ON",led_val,10))
        {
            if (0==strncmp("LED0",led_id,10))
            {
                ret |= system("echo none > /sys/class/leds/heartbeat/trigger");
                ret |= system("echo 1 > /sys/class/leds/heartbeat/brightness");
            }
            else if (0==strncmp("LED1",led_id,10))
            {
                ret |= system("echo none > /sys/class/leds/led1/trigger");
                ret |= system("echo 1 > /sys/class/leds/led1/brightness");
            }
        }
        else if (0==strncmp("OFF",led_val,10))
        {
            if (0==strncmp("LED0",led_id,10))
            {
                ret |= system("echo none > /sys/class/leds/heartbeat/trigger");
                ret |= system("echo 0 > /sys/class/leds/heartbeat/brightness");
            }
            else if (0==strncmp("LED1",led_id,10))
            {
                ret |= system("echo none > /sys/class/leds/led1/trigger");
                ret |= system("echo 0 > /sys/class/leds/led1/brightness");
            }
        }   
    }
    else if (0==strncmp("HEARTBEAT",led_mode,10))
    {
        if (0==strncmp("LED0",led_id,10))
        {
            ret |= system("echo heartbeat > /sys/class/leds/heartbeat/trigger");
        }
        else if (0==strncmp("LED1",led_id,10))
        {
            ret |= system("echo heartbeat > /sys/class/leds/led1/trigger");
        }   
    }
    else if (0==strncmp("TIMER",led_mode,10))
    {
        char tmp1[256];
        char tmp2[256];
        if (0==strncmp("LED0",led_id,10))
        {
            ret |= system("echo timer > /sys/class/leds/heartbeat/trigger");
            sprintf(tmp1, "echo %d > /sys/class/leds/heartbeat/delay_on", led_time_on);
            sprintf(tmp2, "echo %d > /sys/class/leds/heartbeat/delay_off", led_time_off);
            ret |= system(tmp1);
            ret |= system(tmp2);
        }
        else if (0==strncmp("LED1",led_id,10))
        {
            ret |= system("echo timer > /sys/class/leds/led1/trigger");
            sprintf(tmp1, "echo %d > /sys/class/leds/led1/delay_on", led_time_on);
            sprintf(tmp2, "echo %d > /sys/class/leds/led1/delay_off", led_time_off);
            ret |= system(tmp1);
            ret |= system(tmp2);
        }         
    }
    
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"執行結果: %s", ret == 0 ? "成功" : "失敗");
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"返回");
    fprintf(cgiOut,"");
?
    return 0;
}

此cgi程序的執行效果實測如下:

3 編譯與測試

在Ubuntu中對cgi程序進行交叉編譯。

每次打開一個bash窗口進行交叉編譯時,都要先執行一次交叉編譯環境的生效:

. /opt/fsl-imx-xwayland/5.15-kirkstone/environment-setup-armv8a-poky-linux

然后使用gcc指令編譯即可,編譯的后綴為.cgi

$CC led.c cgic.c -o led.cgi

然后將led.cgi和led.html以及html用到的背景圖片拷貝到開發板中,可以新建一個led目錄單獨存放,如下:

root@ok-mx93:/etc/lighttpd# cd /www/pages/led/
root@ok-mx93:/www/pages/led#
root@ok-mx93:/www/pages/led# ls
background.png  led.cgi  led.html
root@ok-mx93:/www/pages/led#

OK-MX9352開發板開機自動啟動Web服務,復制完之后,在電腦的瀏覽器中,輸入板子ip以及對應目錄的html文件目錄即可,如我的是:

192.168.5.115/led/led.html

4 總結

本篇介紹了在OK-MX9352開發板上,通過Web服務,實現網頁上LED控制界面來控制板子上LED進行不同模式的亮滅。

文章首先介紹了在Ubuntu虛擬機中,進行OK-MX9352的C/C++交叉編譯環境配置,然后介紹了Web點燈功能的代碼實現,通過html設置頁面,通過CGI程序實現網頁指令的接收和板子上LED的控制,最后進行代碼編譯和實際測試。
審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5141

    文章

    19537

    瀏覽量

    315138
  • Web
    Web
    +關注

    關注

    2

    文章

    1282

    瀏覽量

    70837
  • Linux
    +關注

    關注

    87

    文章

    11465

    瀏覽量

    212817
  • 開發板
    +關注

    關注

    25

    文章

    5532

    瀏覽量

    102424
  • Ubuntu
    +關注

    關注

    5

    文章

    587

    瀏覽量

    30851
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    FTHR-G0140開發板LED點燈

    FTHR-G0140開發板LED點燈;這個例程是基于MiniBoard (MM32G0141C4PV)的,所要修改PIN才能工作。經查看開發板上的LED接到了PA15上面:
    的頭像 發表于 06-05 12:54 ?21.9w次閱讀
    FTHR-G0140<b class='flag-5'>開發板</b>LED<b class='flag-5'>點燈</b>

    米爾NXP i.MX 93開發板的Qt開發指南

    1.概述Qt是一個跨平臺的圖形應用開發框架,被應用在不同尺寸設備和平臺上,同時提供不同版權版本供用戶選擇。米爾NXPi.MX93開發板(MYD-LMX9X開發板)使用Qt6.5版本進行
    的頭像 發表于 06-07 08:01 ?2170次閱讀
    米爾NXP i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b><b class='flag-5'>開發板</b>的Qt<b class='flag-5'>開發</b>指南

    正點原子i.MX93開發板

    我計劃申請正點原子i.MX93開發板,因為我希望利用其強大的NXP i.MX9352處理器進行中高端嵌入式Linux開發。這款處理器具備雙核
    發表于 05-16 14:57

    i.MX9352——介紹一款多核異構開發板

    本篇來介紹一款多核異構的Linux開發板——OK-MX9352-C開發板
    的頭像 發表于 04-18 10:18 ?1858次閱讀
    i.<b class='flag-5'>MX</b>9352——介紹一款多核異構<b class='flag-5'>開發板</b>

    通過Web網頁控制開發板LED燈

    接下來將介紹如何通過Web網頁來控制開發板上的LED燈,本文只是在網頁上實現功能,并無交互功能,與開發板的交互功能實現將在《
    的頭像 發表于 04-25 15:05 ?1746次閱讀
    通過<b class='flag-5'>Web</b>網頁控制<b class='flag-5'>開發板</b>LED燈

    OK-MX9352-C開發板 產品資料發布記錄-20230206

    飛凌嵌入式OK-MX9352-C開發板產品資料發布記錄-(20230206版)后續會有版本更新,請持續關注。
    發表于 02-13 09:04 ?9次下載

    免費!NXP i.MX 93開發板有獎試用

    米爾與NXP合作發布的新品基于NXPi.MX93應用處理器的MYD-LMX9X開發板免費試用活動來啦~~米爾提供了2塊價值678
    的頭像 發表于 05-23 08:01 ?995次閱讀
    免費!NXP i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b><b class='flag-5'>開發板</b>有獎試用

    點擊參與米爾NXP i.MX 93開發板有獎試用

    米爾與NXP合作發布的新品基于NXPi.MX93應用處理器的MYD-LMX9X開發板免費試用活動來啦~~米爾提供了3塊價值678元的MYD-LMX9X開發板發起試用活動您不僅可以免費體驗還可以獲得京東購物卡趕快點擊鏈接報名吧~
    的頭像 發表于 06-13 08:02 ?875次閱讀
    點擊參與米爾NXP i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b><b class='flag-5'>開發板</b>有獎試用

    198元,米爾NXP i.MX 93開發板,限購300套

    米爾NXPi.MX93開發板憑借其卓越的性能、強勁的推理能力以及豐富的接口資源,在眾多行業應用中都得到了廣泛認可,為回饋廣大行業客戶的支持與厚愛,進一步激發開發者的創新潛能,共同推動技術的發展與進步
    的頭像 發表于 09-27 08:00 ?614次閱讀
    198元,米爾NXP i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b><b class='flag-5'>開發板</b>,限購300套

    3.1s啟動!飛凌嵌入式i.MX93開發板部署LVGL,打造更高效的GUI

    近期,飛凌嵌入式為基于NXP i.MX93系列處理器打造的OK-MX9352-C開發板成功移植了LVGL v8.3,不僅界面美觀精致,啟動速度也大幅提升,僅需3.1s。
    的頭像 發表于 01-16 11:52 ?629次閱讀
    3.1s啟動!飛凌嵌入式i.<b class='flag-5'>MX93</b><b class='flag-5'>開發板</b>部署LVGL,打造更高效的GUI

    NXP推出FRDM i.MX 93開發板, 助力現代工業與邊緣智能開發

    近日,恩智浦半導體(NXP Semiconductor)推出了FRDM i.MX 93開發板,這是FRDM系列中第一款基于MPU推出的開發板,以低成本、緊湊的設計為核心,搭載了NXP
    的頭像 發表于 02-21 09:19 ?1208次閱讀
    NXP推出FRDM i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b><b class='flag-5'>開發板</b>, 助力現代工業與邊緣智能<b class='flag-5'>開發</b>

    恩智浦推出FRDM i.MX 93開發板

    備受嵌入式開發者青睞的恩智浦FRDM開發平臺,迎來了一位新成員——FRDM i.MX 93開發板,這也是第一塊配備i.
    的頭像 發表于 02-21 14:22 ?1082次閱讀

    NXP首款搭載MPU的FRDM產品怎么樣?FRDM i.MX93開發板開箱速覽

    近期,NXP將i.MX 93系列處理器引入了FRDM系列產品線,推出了FRDM i.MX 93開發板,作為首款配備i.
    的頭像 發表于 02-26 14:56 ?776次閱讀
    NXP首款搭載MPU的FRDM產品怎么樣?FRDM i.<b class='flag-5'>MX93</b><b class='flag-5'>開發板</b>開箱速覽

    NXP i.MX 93 開發板#提供高效的機器學習 支持高能效的邊緣計算

    NXP Semiconductors FRDM-IMX93開發板由i.MX 93應用處理器提供支持。NXP Semiconductors FRDM-IMX
    的頭像 發表于 03-10 15:30 ?1050次閱讀
    NXP i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b> <b class='flag-5'>開發板</b>#提供高效的機器學習 支持高能效的邊緣計算

    如何用OpenCV的相機捕捉視頻進行人臉檢測--基于米爾NXP i.MX93開發板

    本文將介紹基于米爾電子MYD-LMX93開發板(米爾基于NXPi.MX93開發板)的基于OpenCV的人臉檢測方案測試。OpenCV提供了一個非常簡單的接口,用于相機捕捉一個視頻(我用
    的頭像 發表于 04-15 11:51 ?257次閱讀
    如何用OpenCV的相機捕捉視頻進行人臉檢測--基于米爾NXP i.<b class='flag-5'>MX93</b><b class='flag-5'>開發板</b>