chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在MicroROS開發(fā)板上編寫HelloWord代碼

CHANBAEK ? 來(lái)源:魚香ROS ? 作者:小魚 ? 2023-07-02 15:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

你好,我是愛吃魚香ROS的小魚。這一節(jié)我們正式在MicroROS開發(fā)板上編寫代碼,輸出HelloWorld到電腦上。在正式開始編寫代碼前,我們先了解下開發(fā)流程。

一、Arduino開發(fā)流程

Arduino和其他單片機(jī)開發(fā),一共分為四步。

  1. 編寫代碼,根據(jù)相關(guān)的APISDK進(jìn)行代碼的編寫。
  2. 編譯工程,將工程的代碼文件編譯成二進(jìn)制文件。
  3. 燒錄二進(jìn)制文件,將上一步生成的二進(jìn)制文件通過(guò)工具燒錄到開發(fā)板中。
  4. 運(yùn)行測(cè)試,重啟開發(fā)板,觀察硬件執(zhí)行情況(數(shù)據(jù)打印一般通過(guò)串口查看)

接下來(lái)小魚就按照上面總結(jié)的幾個(gè)步驟來(lái)嘗試編寫HelloWorld!

二、編寫代碼

2.1 Arduino函數(shù)介紹

前面有介紹,Ardunio平臺(tái)的一大特點(diǎn)就是簡(jiǎn)單易用,而Ardunio使用的開發(fā)語(yǔ)言是C/C++,從工程生成的默認(rèn)代碼就可以看出來(lái)。

#include < Arduino.h >

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

整個(gè)代碼可以分為三個(gè)部分

  1. 頭文件#include
  2. setup()函數(shù),該函數(shù)只會(huì)在啟動(dòng)時(shí)被系統(tǒng)調(diào)用一次
  3. loop()函數(shù),該函數(shù)會(huì)被系統(tǒng)循環(huán)調(diào)用,直到重啟或者斷電

2.2 為什么沒有入口函數(shù)main函數(shù)?

在學(xué)習(xí)C語(yǔ)言和C++時(shí)你應(yīng)該學(xué)過(guò),程序的入口文件是main函數(shù),但在這個(gè)Arduino中卻沒有main函數(shù)的存在,這是為什么?

Arduino其實(shí)是有main函數(shù)的,Arduino的main函數(shù)長(zhǎng)這樣(ESP32-Arduino庫(kù)有所不同,但原理一樣:https://github.com/espressif/arduino-esp32/blob/master/cores/esp32/main.cpp)

#include < Arduino.h >

// Declared weak in Arduino.h to allow user redefinitions.
int atexit(void (* /*func*/ )()) { return 0; }

// Weak empty variant initialization function.
// May be redefined by variant files.
void initVariant() __attribute__((weak));
void initVariant() { }

void setupUSB() __attribute__((weak));
void setupUSB() { }

int main(void)
{
    init();

    initVariant();

#if defined(USBCON)
    USBDevice.attach();
#endif

    setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

    return 0;
}

核心的代碼就這一段

setup();

    for (;;) {
        loop();
        if (serialEventRun) serialEventRun();
    }

從這里就可以看出來(lái),setup和loop函數(shù)之間的關(guān)系,在main函數(shù)中先調(diào)用一次setup函數(shù),再使用for死循環(huán)調(diào)用loop函數(shù)。

2.3 串口輸出HelloWorld

要實(shí)現(xiàn)將HelloWorld!從開發(fā)板輸出到電腦上,我們需要了解一個(gè)常用的通信協(xié)議Serial,常稱串口通信。

關(guān)于串口通信的原理可以到B站搜索相關(guān)視頻,但在這里使用時(shí)你只需要了解如何使用即可。

這里我們了解三個(gè)函數(shù),串口初始化、串口打印、串口讀取。

函數(shù)原型 參數(shù) 返回值 描述
void begin(unsigned long baud) baud:串口波特率 void 該函數(shù)用于初始化串口,主要配置串口波特率,波特率類似于頻道號(hào),串口收發(fā)雙方保持相同的波特率才能進(jìn)行正常通信。常見的波特率有9600,115200等,波特率其實(shí)代表每秒數(shù)據(jù)收發(fā)的頻率,波特率越高,速度越快。
size_t printf(const char *format, ...) format:格式化字符串 size_t 打印的字符數(shù)量 該函數(shù)和我們常見的printf函數(shù)一致,eg:Serial.printf("Hello World!");
int read(void) void int 讀取的字符值,ASSIC表示 該函數(shù)用于讀取一個(gè)字節(jié)的數(shù)據(jù),返回值就是這個(gè)字節(jié)的值,如果沒有數(shù)據(jù)則返回-1

基于上面的函數(shù),我們可以這樣輸出HelloWorld!

#include < Arduino.h >

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.printf("Hello World!\\n");
}

在setup()函數(shù)里進(jìn)行串口的初始化, 波特率設(shè)置成了115200 ,在loop函數(shù)中不斷的輸出Hello World!。

三、編譯代碼

點(diǎn)擊對(duì)號(hào),或者使用快捷鍵Ctrl+Alt+B,即可編譯。

圖片

看到Building .pio/build/featheresp32/firmware.binSuccessfully created esp32 image.就代表已經(jīng)成功生成了二進(jìn)制文件,下一步我們就開始燒錄二進(jìn)制文件。

四、燒錄二進(jìn)制文件

4.1 連接開發(fā)板到電腦

MicroROS學(xué)習(xí)板采用TypeC接口,你需要一個(gè)USB數(shù)據(jù)線將開發(fā)板連接到你的電腦。連接電腦后,Linux系統(tǒng)驅(qū)動(dòng)會(huì)被自動(dòng)搜索和加載,查看是否有正確驅(qū)動(dòng),可以使用lsusb進(jìn)行測(cè)試。

lsusb

輸入后,如果可以看到CP210x這個(gè)設(shè)備,就代表驅(qū)動(dòng)加載成功了

圖片

驅(qū)動(dòng)加載成功后在/dev目錄下會(huì)多出一個(gè)ttyUSBx的設(shè)備,比如小魚這里就是/dev/ttyUSB0

使用ls /dev/ttyUSB*指令可以將其列出

圖片

4.2 設(shè)置設(shè)備權(quán)限

我們想讓開發(fā)板和電腦通過(guò)串口進(jìn)行通信,電腦端只需對(duì)這個(gè)串口進(jìn)行讀寫就行了。因?yàn)樵O(shè)備默認(rèn)的生成目錄是在/dev目錄下,普通用戶是沒有讀寫權(quán)限的,所以在使用之前我們可以修改下該設(shè)備的權(quán)限。

臨時(shí)修改

sudo chmod 666 /dev/ttyUSBx

圖片

也可以永久修改,將用戶添加到dialout和plugdev組(重啟后方生效)

sudo usermod -a -G dialout $USER
sudo usermod -a -G plugdev $USER

圖片

4.3 燒錄二進(jìn)制文件

點(diǎn)擊左下角的上傳燒錄按鈕,或者使用快捷鍵Ctrl+Alt+U進(jìn)行燒錄。

圖片

看到上面四部分打印代表燒錄成功,可以看到PIO可以自動(dòng)檢測(cè)串口并進(jìn)行連接,接著上傳文件到開發(fā)板,最后自動(dòng)重啟。

五、運(yùn)行測(cè)試

因?yàn)樵谙螺d完成后,下載程序幫我們自動(dòng)重啟了,所以這里我們不需要進(jìn)行重啟。接著我們使用串口Monitor打開串口看看有沒有數(shù)據(jù)。

點(diǎn)擊Serial Monitor按鈕,或者使用快捷鍵Ctrl+Alt+S,如果沒有出錯(cuò),你將看到下面的亂碼。

原因是終端的波特率不對(duì),開發(fā)板發(fā)送給電腦數(shù)據(jù)的波特率是115200,而電腦接收的波特率是9600,不匹配就會(huì)造成亂碼。

圖片

通過(guò)修改配置文件,可以修改Serial Monitor的默認(rèn)波特率。

platformio.ini中添加一行代碼

monitor_speed = 115200

圖片

接著關(guān)閉剛剛的終端,再重新打開,接著我們就可以看到嗖嗖嗖的Hello World!

圖片

六、總結(jié)

本節(jié)我們成功將自己的代碼上傳到開發(fā)板上了,然后通過(guò)串口成功的和單片機(jī)建立了單向連接(開發(fā)板向電腦發(fā)送數(shù)據(jù)),下一節(jié)我們學(xué)習(xí)下電腦向單片機(jī)發(fā)送消息。

最后還有幾個(gè)小作業(yè)

1.上面我們輸出Hello World!在不斷的輸出,如果想要改成只輸出一次,代碼該怎么寫?

答案:

#include < Arduino.h >

void setup() {
  Serial.begin(115200);
  Serial.printf("Hello World!\\n");
}

void loop() {
}

2.上面我們輸出Hello World!在快速的輸出,如果想要改成每秒輸出一次,代碼該怎么寫?

提示函數(shù):void delay(uint32_t ms)延時(shí)指定ms。

答案:

#include < Arduino.h >

void setup() {
  Serial.begin(115200);
}

void loop() {
  delay(1000);
  Serial.printf("Hello World!\\n");
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6071

    文章

    45256

    瀏覽量

    660079
  • 開發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    5999

    瀏覽量

    110061
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4922

    瀏覽量

    72235
  • Arduino
    +關(guān)注

    關(guān)注

    190

    文章

    6509

    瀏覽量

    194749
  • ROS
    ROS
    +關(guān)注

    關(guān)注

    1

    文章

    290

    瀏覽量

    18250
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    可以S32K144-Q100運(yùn)行MicroROS嗎?

    我可以 S32K144-Q100 運(yùn)行 MicroROS 嗎?
    發(fā)表于 04-08 07:41

    makefile交叉編譯helloword.bin然后開發(fā)板運(yùn)行怎么操作?

    我想編譯自己的應(yīng)用程序開發(fā)板跑,看了手冊(cè)里面只寫到用Qt編譯helloword.bin然后開發(fā)板
    發(fā)表于 12-31 07:26

    helloword測(cè)試程序下載到開發(fā)板里出現(xiàn)錯(cuò)誤如何去解決呢

    helloword測(cè)試程序下載到開發(fā)板里面出現(xiàn)這種情況
    發(fā)表于 12-31 07:23

    helloword測(cè)試程序下載到開發(fā)板里面出現(xiàn)這種情況Segmentation fault是為什么?

    helloword測(cè)試程序下載到開發(fā)板里面出現(xiàn)這種情況Segmentation fault是為什么?
    發(fā)表于 01-13 06:29

    LINUXTE2410開發(fā)板的移植

    本實(shí)驗(yàn)是TE2410開發(fā)板實(shí)現(xiàn)的。TE2410開發(fā)板是保定飛凌嵌入式技術(shù)有限公司自主研發(fā)的一款 ARM9 開發(fā)平臺(tái)(http://www
    發(fā)表于 07-25 18:16 ?59次下載

    ARM7開發(fā)板做的U盤源代碼

    ARM7開發(fā)板做的U盤源代碼,有需要的下來(lái)看看。
    發(fā)表于 05-25 10:01 ?12次下載

    華清遠(yuǎn)見FPGA代碼-Xilinx的FPGA開發(fā)板運(yùn)行第一個(gè)

    華清遠(yuǎn)見FPGA代碼-Xilinx的FPGA開發(fā)板運(yùn)行第一個(gè)FPGA程序
    發(fā)表于 10-27 18:07 ?23次下載

    華清遠(yuǎn)見FPGA代碼-Altera的FPGA開發(fā)板運(yùn)行第一個(gè)

    華清遠(yuǎn)見FPGA代碼-Altera的FPGA開發(fā)板運(yùn)行第一個(gè)FPGA程序
    發(fā)表于 10-27 18:07 ?16次下載

    基于Xilinx FPGA的開發(fā)板代碼

    文檔內(nèi)容包含基于Xilinx FPGA的開發(fā)板代碼及原路圖,供網(wǎng)友參考。
    發(fā)表于 09-01 11:09 ?20次下載

    通過(guò)編寫verilog代碼實(shí)現(xiàn)OLED驅(qū)動(dòng)和內(nèi)容顯示的解決方案

    本實(shí)驗(yàn)通過(guò)verilog代碼編寫EGO1開發(fā)板實(shí)現(xiàn)OLED的驅(qū)動(dòng)和內(nèi)容顯示。
    的頭像 發(fā)表于 11-11 08:22 ?2w次閱讀

    移植FreeRTOS到STM32開發(fā)板的工程文件和源代碼免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是移植FreeRTOS到STM32開發(fā)板的工程文件和源代碼免費(fèi)下載。
    發(fā)表于 01-07 08:00 ?16次下載
    移植FreeRTOS到STM32<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>的工程文件和源<b class='flag-5'>代碼</b>免費(fèi)下載

    如何使用代碼控制開發(fā)板

      HarmonyOS Connect設(shè)備開發(fā),相信不少剛?cè)腴T的開發(fā)者都被這些問題所困擾,面對(duì)五花八門的開發(fā)板不知道該怎么選取?芯片、模組、開發(fā)板傻傻分不清?如何使用
    的頭像 發(fā)表于 03-14 14:40 ?5477次閱讀

    AI愛克斯開發(fā)板用OpenVINO?加速YOLOv8目標(biāo)檢測(cè)模型

    AI 愛克斯開發(fā)板用 OpenVINO 加速 YOLOv8 分類模型》介紹了 AI 愛克斯開發(fā)板
    的頭像 發(fā)表于 05-12 09:08 ?2041次閱讀
    <b class='flag-5'>在</b>AI愛克斯<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>用OpenVINO?加速YOLOv8目標(biāo)檢測(cè)模型

    如何微控制器新建MicroROS節(jié)點(diǎn)

    你好,我是愛吃魚香ROS的小魚。一節(jié)我們介紹了MicroROS和Agent的安裝,本節(jié)我們開始正式編寫代碼,接入ROS2。
    的頭像 發(fā)表于 07-15 16:52 ?2447次閱讀
    如何微控制器<b class='flag-5'>上</b>新建<b class='flag-5'>MicroROS</b>節(jié)點(diǎn)

    TI開發(fā)板啟用Android Automotive

    電子發(fā)燒友網(wǎng)站提供《TI開發(fā)板啟用Android Automotive.pdf》資料免費(fèi)下載
    發(fā)表于 09-18 14:52 ?0次下載
    <b class='flag-5'>在</b>TI<b class='flag-5'>開發(fā)板</b><b class='flag-5'>上</b>啟用Android Automotive