<strike id="kiyse"></strike>
  • <tr id="kiyse"></tr>
  • <strike id="kiyse"></strike><samp id="kiyse"><tbody id="kiyse"></tbody></samp>
    <strike id="kiyse"><s id="kiyse"></s></strike>
    <tr id="kiyse"></tr>
    <noframes id="kiyse"><code id="kiyse"></code></noframes>
    <th id="kiyse"></th>
    <samp id="kiyse"></samp>
  • <th id="kiyse"><s id="kiyse"></s></th>
  • 英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一

     2020-9-29     作者:Emtronix         

      本文主要介紹在英創(chuàng)工控主板(ESM8000、ESM7000和ESM6800H)上,采用Python和C#編程,實(shí)現(xiàn)文件訪問、串口通訊、GPIO和網(wǎng)絡(luò)通訊的方法。用Python或C#編寫的程序,均可通過相應(yīng)的class庫,直接操作這些接口。


      本文的4個(gè)demo實(shí)例,均采用Visual Studio Code作為基本的編程工具,其代碼可在主板 + ESMARC評(píng)估底板上運(yùn)行,其基本的硬件環(huán)境采用采用ESM8000工控主板 + 評(píng)估底板構(gòu)成,如下圖所示:


    esm8000套件側(cè)面2.png


      實(shí)例1 – Step1_File:介紹文件讀取的基本方法(link to Step1_File)。

      實(shí)例2 – Step2_Serial:介紹異步串口UART的應(yīng)用方法,以ttyS2的收發(fā)為例(link to Step2_Serial)。豐富的串口資源是英創(chuàng)工控主板特色之一。

      實(shí)例3 – Step3_Gpio:介紹通用數(shù)字IO(GPIO)的使用方法(link to Step3_Gpio)。英創(chuàng)工控主板均包含32位GPIO。

      實(shí)例4 – Step4_Net:介紹網(wǎng)口的使用方法(link to Step4_Net)。這里網(wǎng)口既可以是常用的RJ45形式以太網(wǎng)口,也可以是SPF接口形式的光纖網(wǎng)口、WiFi無線局域網(wǎng),以及4G/GPRS廣域網(wǎng)接口,英創(chuàng)Linux主板對這些網(wǎng)絡(luò)都有完善的支持。


    Step1_File


      userinfo.txt是英創(chuàng)Linux主板(ESM8000、ESM7000和ESM6800H)的基本配置文件,存放在/mnt/mmc/目錄下。讀取文件userinfo.txt信息,打印到console;提取eth0網(wǎng)口的IP參數(shù),打印到console。


      測試硬件平臺(tái):ESM8000 + ESMARC評(píng)估底板,僅使用調(diào)試串口。


      Python實(shí)現(xiàn)


      首先創(chuàng)建一個(gè)新目錄,如D:\Python>mkdir Step1_File,然后啟動(dòng)VS Code,打開該目錄同時(shí)點(diǎn)擊“New File”添加文件step1_file.py,并在該文件編寫相應(yīng)的實(shí)現(xiàn)代碼,如下:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      代碼編寫好后,即可直接在ESM8000板卡上直接運(yùn)行。


      開發(fā)中為了方便測試,一般采用文件系統(tǒng)掛載的方式進(jìn)行,詳細(xì)的配置和使用的方法請參考ESM8000使用必讀中相關(guān)介紹(link to 使用必讀)。


      在ESM8000 console終端中運(yùn)行如下命令:

      root@ESM8000#>mount -t nfs -o nfsvers=3 192.168.201.12:/home/zhl/esm8000/python /mnt/nfs

      root@ESM8000#>cd /mnt/nfs/step1_file

      root@ESM8000#>python3 step1_file.py


      即可在終端看到該程序的執(zhí)行結(jié)果。


      C#實(shí)現(xiàn)


      首先創(chuàng)建一個(gè)新目錄,如D:\CSharp>mkdir Step1_File,然后啟動(dòng)VS Code,打開該目錄如下:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      在VS Code的Terminal窗口中執(zhí)行dotnet new console,創(chuàng)建C# Project,可看到基本程序框架如下:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      編寫代碼實(shí)現(xiàn)Step1_File要求的功能:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      執(zhí)行dotnet publish –r linux-arm64 –self-contained false,編譯程序并發(fā)布可以在ARM64 CPU架構(gòu)的Linux系統(tǒng)中運(yùn)行的代碼。


      發(fā)布的可執(zhí)行代碼包含在..\Step1_File\bin\Debug\net5.0\linux-arm64\publish\目錄下。ESM8000目標(biāo)機(jī)只需掛載開發(fā)主機(jī)的這個(gè)目錄,就可以運(yùn)行這個(gè)程序了。


      開發(fā)主機(jī)若為Linux系統(tǒng),掛載命令為:

      root@ESM8000#>mount -t nfs -o nfsvers=3 192.168.201.137:/home/x10/esm8000/csharp  /mnt/nfs


      開發(fā)主機(jī)若為Windows系統(tǒng),掛載命令為:

      root@ESM8000#>mount -t nfs -o nfsvers=3 192.168.201.14:/d/csharp  /mnt/nfs


      在ESM8000 console運(yùn)行Step1_File程序:

      root@ESM8000#>cd /mnt/nfs

      root@ESM8000:/mnt/nfs #>./Step1_File/bin/Debug/linux-arm64/publish/Step1_File


      可在console窗口看到Step1_File運(yùn)行輸出的結(jié)果。


      Step1_File實(shí)現(xiàn)的功能很簡單,本例主要是展示C#程序開發(fā)的基本流程,特別是它跨平臺(tái)的特性。


    Step2_Serial


      串口(ttyS2,115200-8-N-1)接收后回發(fā),并把接收到的字節(jié)數(shù)等統(tǒng)計(jì)信息顯示到console。


      Python實(shí)現(xiàn)


      在該例程中需要用pyserial的庫文件,ESM8000主板文件系統(tǒng)中已經(jīng)配置pyserial package,原則上客戶在開發(fā)主機(jī)上編寫好如下代碼,即可直接在ESM8000上運(yùn)行。


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      為了在VS Code編輯環(huán)境中對導(dǎo)入的python庫有在線幫助及聯(lián)想功能,需在開發(fā)主機(jī)上也安裝python以及pyserial package等。無論是Linux開發(fā)主機(jī)還是Windows開發(fā)主機(jī),都可以通過pip 命令進(jìn)行安裝。這里重點(diǎn)介紹一下Windows主機(jī)上VS Code安裝方法。


      首先在Windows主機(jī)上安裝python,直接下載安裝即可,這里不再贅述。安裝完成后,啟動(dòng)VS code界面中就可看到安裝python的版本信息。此時(shí)打開Terminal 窗口,運(yùn)行如下命令:>pip install pyserial


      C#實(shí)現(xiàn)


      .NET 5的C#程序的一個(gè)特點(diǎn)之一,是系統(tǒng)僅包含.NET Core部分,而具體的應(yīng)用程序再包含所需的特殊功能包,這樣做可使.NET環(huán)境保持相對穩(wěn)定。Step2_Serial對一部串口UART的操作,需要C#的System.IO.Ports類庫,可在VS Code的Terminal窗口(D:\CSharp\Step2_Serial>)完成相關(guān)類庫的添加:

      >dotnet add package System.IO.Ports --version 5.0.0-rc.1.20451.14


      注意有些類庫的版本,需要與.NET的版本保持一致。具體的實(shí)現(xiàn)代碼如下所示:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      編譯及發(fā)布方法與Step1一樣,這里不再贅述。


    Step3_Gpio


      Step3_Gpio把ESM8000主板的GPIO8作為輸入,GPIO9作為輸出。檢測到GPIO8的下降沿,就改變GPIO9的輸出電平。


      Python實(shí)現(xiàn)


      ESM8000共32路GPIO,Step3_gpio.py例程實(shí)現(xiàn)的功能是設(shè)置相鄰的兩路GPIO,其中分別為輸出和輸入,測試時(shí)將它們短接,通過讀取輸入GPIO的狀態(tài),觀察電平的變化。


      例程可帶參數(shù),該參數(shù)為GPIO的序號(hào),缺省為0。代碼中定義的EM_GPIOs列表實(shí)現(xiàn)ESM8000的32位GPIO管腳至iMX8MM系統(tǒng)GPIO的轉(zhuǎn)換。


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      C#實(shí)現(xiàn)


      在創(chuàng)建Step3_Gpio工程后,需要添加C#的System.Device.Gpio類庫,才能實(shí)現(xiàn)對GPIO的操作。在Linux平臺(tái),System.Device.Gpio類庫依賴于libgpiod庫。添加類庫的操作也是在VS Code的Terminal窗口(D:\CSharp\Step3_Gpio>)完成:

      dotnet add package System.Device.Gpio --version 1.1.0-prerelease.20276.1


      代碼中用class Esm8000Gpio類來實(shí)現(xiàn)ESM8000的32位GPIO管腳至iMX8MM系統(tǒng)GPIO的轉(zhuǎn)換。


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      接著就可以定義相關(guān)的對象了,每位GPIO都有自己的Controller,在構(gòu)造函數(shù)中需要與Linux平臺(tái)的libgpiod驅(qū)動(dòng)聯(lián)系在一起。


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      對Linux平臺(tái),System.Device.Gpio實(shí)現(xiàn)了對輸入事件回調(diào)函數(shù)響應(yīng)功能,正好應(yīng)用到本實(shí)例中。主循環(huán)檢查事件計(jì)數(shù)器,并根據(jù)結(jié)果來驅(qū)動(dòng)GPIO9電平翻轉(zhuǎn)。


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      實(shí)際應(yīng)用程序可根據(jù)實(shí)際需求,在回調(diào)函數(shù)中實(shí)現(xiàn)更多復(fù)雜的功能。


    Step4_Net


      TCP(Port No = 6000)接收后回發(fā),并把接收到的字節(jié)數(shù)等統(tǒng)計(jì)信息顯示到console。


      Python實(shí)現(xiàn)


      step4_net.py 直接調(diào)用socket函數(shù)啟動(dòng)tcp 服務(wù)器模式,代碼如下:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      C#實(shí)現(xiàn)


      C#的網(wǎng)絡(luò)通訊功能需要System.Net.Sockets類庫,.NET Core已包含該庫,也認(rèn)可從NuGet下載最新版本的庫。具體的實(shí)現(xiàn)代碼如下:


    英創(chuàng)Linux主板的Python, C#實(shí)例簡介之一.png


      值得一提的是,應(yīng)用程序是在Socket層面操作網(wǎng)絡(luò)接口,與具體的網(wǎng)絡(luò)接口形式無關(guān),即網(wǎng)絡(luò)接口可以是最基本的RJ45形式的以太網(wǎng)口,也可以是WiFi接口、4G/GPRS無線接口等等。在傳統(tǒng)的WinCE平臺(tái)上,由于微軟對WiFi等新的網(wǎng)絡(luò)接口支持不夠,限制了CE平臺(tái)在這方面的應(yīng)用,而在Linux平臺(tái)上,對各種網(wǎng)絡(luò)接口都有很好的支持,為使用C#的客戶遷移到Linux平臺(tái)提供了重要的支撐。     

    久久99精品久久久久久hb无码 | 国产成人精品亚洲| 国产亚洲精品精品精品| 亚洲国产精品SSS在线观看AV| 亚洲中文字幕久久精品无码A| 久久久久无码国产精品不卡| 无码成人精品区在线观看| 99re热视频这里只精品| 精品极品三级久久久久| 亚洲永久永久永久永久永久精品| 国产精品美女一级在线观看| 91精品国产91久久久久久最新| 国产亚洲精品激情都市| 精品国产乱码久久久久久郑州公司| 麻豆精品久久久一区二区| 国产成人精品高清免费| 国产精品毛片久久久久久久| 久久老子午夜精品无码| H无码精品3D动漫在线观看| 国产精品jizz在线观看网站| 精品亚洲成A人无码成A在线观看| 国产精品无码av在线播放| 亚洲国产精品国产自在在线| 国产成人无码精品久久久小说| 91午夜精品亚洲一区二区三区| 国产精品露脸国语对白| 免费精品久久久久久中文字幕| 国产精品嫩草影院人体模特| 蜜臀久久99精品久久久久久小说 | 国产精品女主播自在线拍| 亚洲日本精品一区二区| 国产在线精品福利大全| 夜夜精品无码一区二区三区| 国产精品黄页在线播放免费| 国产精品久久久久久久app | 国内精品伊人久久久影院| 99ri在线精品视频| 国产成人精品免费久久久久| 国产揄拍国产精品| 国产精品无码免费专区午夜| www.99精品|