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

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

3天內不再提示

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

CHANBAEK ? 來源:魚香ROS ? 作者:小魚 ? 2023-07-02 15:38 ? 次閱讀

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

一、Arduino開發(fā)流程

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

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

接下來小魚就按照上面總結的幾個步驟來嘗試編寫HelloWorld!

二、編寫代碼

2.1 Arduino函數介紹

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

#include < Arduino.h >

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

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

整個代碼可以分為三個部分

  1. 頭文件#include
  2. setup()函數,該函數只會在啟動時被系統調用一次
  3. loop()函數,該函數會被系統循環(huán)調用,直到重啟或者斷電

2.2 為什么沒有入口函數main函數?

在學習C語言和C++時你應該學過,程序的入口文件是main函數,但在這個Arduino中卻沒有main函數的存在,這是為什么?

Arduino其實是有main函數的,Arduino的main函數長這樣(ESP32-Arduino庫有所不同,但原理一樣: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();
    }

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

2.3 串口輸出HelloWorld

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

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

這里我們了解三個函數,串口初始化、串口打印、串口讀取。

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

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

#include < Arduino.h >

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

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

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

三、編譯代碼

點擊對號,或者使用快捷鍵Ctrl+Alt+B,即可編譯。

圖片

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

四、燒錄二進制文件

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

MicroROS學習板采用TypeC接口,你需要一個USB數據線將開發(fā)板連接到你的電腦。連接電腦后,Linux系統驅動會被自動搜索和加載,查看是否有正確驅動,可以使用lsusb進行測試。

lsusb

輸入后,如果可以看到CP210x這個設備,就代表驅動加載成功了

圖片

驅動加載成功后在/dev目錄下會多出一個ttyUSBx的設備,比如小魚這里就是/dev/ttyUSB0

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

圖片

4.2 設置設備權限

我們想讓開發(fā)板和電腦通過串口進行通信,電腦端只需對這個串口進行讀寫就行了。因為設備默認的生成目錄是在/dev目錄下,普通用戶是沒有讀寫權限的,所以在使用之前我們可以修改下該設備的權限。

臨時修改

sudo chmod 666 /dev/ttyUSBx

圖片

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

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

圖片

4.3 燒錄二進制文件

點擊左下角的上傳燒錄按鈕,或者使用快捷鍵Ctrl+Alt+U進行燒錄。

圖片

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

五、運行測試

因為在下載完成后,下載程序幫我們自動重啟了,所以這里我們不需要進行重啟。接著我們使用串口Monitor打開串口看看有沒有數據。

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

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

圖片

通過修改配置文件,可以修改Serial Monitor的默認波特率。

platformio.ini中添加一行代碼

monitor_speed = 115200

圖片

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

圖片

六、總結

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

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

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

答案:

#include < Arduino.h >

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

void loop() {
}

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

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

答案:

#include < Arduino.h >

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

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

    關注

    6037

    文章

    44558

    瀏覽量

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

    關注

    25

    文章

    5052

    瀏覽量

    97494
  • 代碼
    +關注

    關注

    30

    文章

    4788

    瀏覽量

    68625
  • Arduino
    +關注

    關注

    188

    文章

    6469

    瀏覽量

    187108
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17010
收藏 人收藏

    評論

    相關推薦

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

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

    helloword測試程序下載到開發(fā)板里出現錯誤如何去解決呢

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

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

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

    LINUXTE2410開發(fā)板的移植

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

    DSP2812開發(fā)板例程代碼

    dsp2182開發(fā)板入門資料,包含24個代碼例程。
    發(fā)表于 05-09 11:45 ?81次下載

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

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

    華清遠見FPGA代碼-Xilinx的FPGA開發(fā)板運行第一個

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

    華清遠見FPGA代碼-Altera的FPGA開發(fā)板運行第一個

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

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

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

    通過編寫verilog代碼實現OLED驅動和內容顯示的解決方案

    本實驗通過verilog代碼編寫,EGO1開發(fā)板實現OLED的驅動和內容顯示。
    的頭像 發(fā)表于 11-11 08:22 ?1.9w次閱讀

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

    本文檔的主要內容詳細介紹的是移植FreeRTOS到STM32開發(fā)板的工程文件和源代碼免費下載。
    發(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ā)板

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

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

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

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

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

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

    電子發(fā)燒友網站提供《TI開發(fā)板啟用Android Automotive.pdf》資料免費下載
    發(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