色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

OK-MX93開發(fā)板-實現(xiàn)Web頁面無線點燈

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

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

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

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

1 交叉編譯環(huán)境配置

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拷貝到自己的文件夾中,然后執(zhí)行該腳本進行交叉編譯工具鏈的安裝。

安裝過程如下:

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

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

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

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

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

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

執(zhí)行make編譯

也可以執(zhí)行使用指令進行編譯:

$CC hello.c -o hello

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

scp hello root@192.168.5.115:/home/mytest

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

2 Web頁面點燈代碼

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

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

2.1 lighttpd配置修改

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

/etc/lighttpd/lighttpd.conf

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

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

2.2 Web頁面設計

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

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

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

選擇不同的控制模式后,為了能動態(tài)展示不同模式下的操作功能,比如開關模式下需要顯示開和關的按鈕,心跳燈模式則不需要額外的配置,定時器模式則需要兩個輸入框來設置亮的時間和滅的時間。這里使用script功能,來實現(xiàn)此功能,通過讀取網頁中當前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程序可以使用多種語言來實現(xiàn),對于嵌入式開發(fā),那就用熟悉的C語言來編寫吧。

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

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

#include "cgic.h"
#include 
#include 
?
// cgic程序以cgiMain作為入口點, cgic的函數(shù)庫會自動把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開發(fā)板從Web頁面收到數(shù)據(jù):");
    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,"執(zhí)行結果: %s", ret == 0 ? "成功" : "失敗");
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"
"); 
    fprintf(cgiOut,"返回");
    fprintf(cgiOut,"");
?
    return 0;
}

此cgi程序的執(zhí)行效果實測如下:

3 編譯與測試

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

每次打開一個bash窗口進行交叉編譯時,都要先執(zhí)行一次交叉編譯環(huán)境的生效:

. /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用到的背景圖片拷貝到開發(fā)板中,可以新建一個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開發(fā)板開機自動啟動Web服務,復制完之后,在電腦的瀏覽器中,輸入板子ip以及對應目錄的html文件目錄即可,如我的是:

192.168.5.115/led/led.html

4 總結

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

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

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

    關注

    5082

    文章

    19104

    瀏覽量

    304804
  • Web
    Web
    +關注

    關注

    2

    文章

    1262

    瀏覽量

    69441
  • Linux
    +關注

    關注

    87

    文章

    11292

    瀏覽量

    209326
  • 開發(fā)板
    +關注

    關注

    25

    文章

    5032

    瀏覽量

    97371
  • Ubuntu
    +關注

    關注

    5

    文章

    563

    瀏覽量

    29704
收藏 人收藏

    評論

    相關推薦

    FTHR-G0140開發(fā)板LED點燈

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

    米爾NXP i.MX 93開發(fā)板的Qt開發(fā)指南

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

    基于OPENCV的相機捕捉視頻進行人臉檢測--米爾NXP i.MX93開發(fā)板

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

    正點原子i.MX93開發(fā)板

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

    【正點原子i.MX93開發(fā)板試用連載體驗】第一篇:開箱

    感謝電子發(fā)燒友論壇和正點原子提供的這次寶貴的試用機會,我計劃利用該開發(fā)板完成一個小型機器人的控制demo,同時測評各個功能模塊。首先,正點原子i.MX93開發(fā)板是一款基于NXP i.MX
    發(fā)表于 06-20 14:06

    【飛凌i.MX9352開發(fā)板試用】+NPU功能測試

    OK-MX93中集成了0.5TOPS的NPU,可加速機器學習推斷。 這里的TOPS是算力單位,是Tera Operations Per Second的縮寫,1TOPS代表處理器每秒鐘可進行一萬億次
    發(fā)表于 06-09 22:28

    OK2440開發(fā)板入門操作視頻教程

    OK2440開發(fā)板新手操作視頻教程 入門教程
    發(fā)表于 01-08 15:08 ?0次下載

    基于i.MX RT1061處理器的OK1061-S開發(fā)板介紹

    OK1061-S開發(fā)板采用“底板+核心”結構設計,搭載NXP公司 i.MX RT1061跨界處理器,ARM Cortex-M7內核,集微控制器的低功耗、易用性與應用處理器的高性能、高
    的頭像 發(fā)表于 11-21 09:30 ?1.1w次閱讀
    基于i.<b class='flag-5'>MX</b> RT1061處理器的<b class='flag-5'>OK</b>1061-S<b class='flag-5'>開發(fā)板</b>介紹

    飛凌嵌入式OK1052-C開發(fā)板簡介

    OK1052-C 開發(fā)板 OK1052-C開發(fā)板基于NXP公司 i.MX RT1052跨界處理器設計,搭載ARM Cortex-M7內
    的頭像 發(fā)表于 12-03 15:54 ?6788次閱讀
    飛凌嵌入式<b class='flag-5'>OK</b>1052-C<b class='flag-5'>開發(fā)板</b>簡介

    i.MX9352——介紹一款多核異構開發(fā)板

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

    通過Web網頁控制開發(fā)板LED燈

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

    OK-MX9352-C開發(fā)板 產品資料發(fā)布記錄-20230206

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

    免費!NXP i.MX 93開發(fā)板有獎試用

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

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

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

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

    米爾NXPi.MX93開發(fā)板憑借其卓越的性能、強勁的推理能力以及豐富的接口資源,在眾多行業(yè)應用中都得到了廣泛認可,為回饋廣大行業(yè)客戶的支持與厚愛,進一步激發(fā)開發(fā)者的創(chuàng)新潛能,共同推動技術的發(fā)展與進步
    的頭像 發(fā)表于 09-27 08:00 ?357次閱讀
    198元,米爾NXP i.<b class='flag-5'>MX</b> <b class='flag-5'>93</b><b class='flag-5'>開發(fā)板</b>,限購300套
    主站蜘蛛池模板: 亚洲欧美日韩人成| 毛片免费观看| 国产精品爽爽久久久久久竹菊| 99在线观看免费| 8x8x我要打机飞在线观看| 国产专区_爽死777| 久久精品国产亚洲精品2020| 蜜桃人妻无码AV天堂三区 | 国产免费麻传媒精品国产AV| 国产亚洲精品视频亚洲香蕉视| 精品国产mmd在线观看| 美女尿口羞羞视频| 色欲天天天综合网免费| 亚洲精品国产自在现线最新| 91精品视频网站| 国产超碰人人爱被IOS解锁| 黑色丝袜美女被网站| 蜜芽在线播放免费人成日韩视频| 欧美最猛性xxxxx亚洲精品| 向日葵视频app下载18岁以下勿看| 一手揉着乳头一手模仿抽插视频| 97国产精品人妻无码免费| 国产成人a视频在线观看| 久草高清在线| 青青草国产精品| 亚洲欧美精品无码大片在线观看| 97国产人妻精品无码AV在线| 国产精品九九久久| 老师扒开尿口男生摸尿口| 视频一区国产在线第一页| 在线观看中文字幕国产| 第四色男人天堂| 久久久黄色大片| 色宅男看片午夜大片免费看| 永久免费在线看mv| 国产不卡无码高清视频| 久久综合色悠悠| 羞羞影院午夜男女爽爽影院网站| 2020亚洲 欧美 国产 日韩| 国产三级在线精品男人的天堂| 恋夜秀场支持安卓版全部视频国产|