0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在MicroROS开发板上编写HelloWord代码

CHANBAEK 来源:鱼香ROS 作者:小鱼 2023-07-02 15:38 次阅读

你好,我是爱吃鱼香ROS的小鱼。这一节我们正式在MicroROS开发板上编写代码,输出HelloWorld到电脑上。在正式开始编写代码前,我们先了解下开发流程。

一、Arduino开发流程

Arduino和其他单片机开发,一共分为四步。

  1. 编写代码,根据相关的APISDK进行代码的编写。
  2. 编译工程,将工程的代码文件编译成二进制文件。
  3. 烧录二进制文件,将上一步生成的二进制文件通过工具烧录到开发板中。
  4. 运行测试,重启开发板,观察硬件执行情况(数据打印一般通过串口查看)

接下来小鱼就按照上面总结的几个步骤来尝试编写HelloWorld!

二、编写代码

2.1 Arduino函数介绍

前面有介绍,Ardunio平台的一大特点就是简单易用,而Ardunio使用的开发语言是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()函数,该函数会被系统循环调用,直到重启或者断电

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死循环调用loop函数。

2.3 串口输出HelloWorld

要实现将HelloWorld!从开发板输出到电脑上,我们需要了解一个常用的通信协议Serial,常称串口通信。

关于串口通信的原理可以到B站搜索相关视频,但在这里使用时你只需要了解如何使用即可。

这里我们了解三个函数,串口初始化、串口打印、串口读取。

函数原型 参数 返回值 描述
void begin(unsigned long baud) baud:串口波特率 void 该函数用于初始化串口,主要配置串口波特率,波特率类似于频道号,串口收发双方保持相同的波特率才能进行正常通信。常见的波特率有9600,115200等,波特率其实代表每秒数据收发的频率,波特率越高,速度越快。
size_t printf(const char *format, ...) format:格式化字符串 size_t 打印的字符数量 该函数和我们常见的printf函数一致,eg:Serial.printf("Hello World!");
int read(void) void int 读取的字符值,ASSIC表示 该函数用于读取一个字节的数据,返回值就是这个字节的值,如果没有数据则返回-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 连接开发板到电脑

MicroROS学习板采用TypeC接口,你需要一个USB数据线将开发板连接到你的电脑。连接电脑后,Linux系统驱动会被自动搜索和加载,查看是否有正确驱动,可以使用lsusb进行测试。

lsusb

输入后,如果可以看到CP210x这个设备,就代表驱动加载成功了

图片

驱动加载成功后在/dev目录下会多出一个ttyUSBx的设备,比如小鱼这里就是/dev/ttyUSB0

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

图片

4.2 设置设备权限

我们想让开发板和电脑通过串口进行通信,电脑端只需对这个串口进行读写就行了。因为设备默认的生成目录是在/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可以自动检测串口并进行连接,接着上传文件到开发板,最后自动重启。

五、运行测试

因为在下载完成后,下载程序帮我们自动重启了,所以这里我们不需要进行重启。接着我们使用串口Monitor打开串口看看有没有数据。

点击Serial Monitor按钮,或者使用快捷键Ctrl+Alt+S,如果没有出错,你将看到下面的乱码。

原因是终端的波特率不对,开发板发送给电脑数据的波特率是115200,而电脑接收的波特率是9600,不匹配就会造成乱码。

图片

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

platformio.ini中添加一行代码

monitor_speed = 115200

图片

接着关闭刚刚的终端,再重新打开,接着我们就可以看到嗖嗖嗖的Hello World!

图片

六、总结

本节我们成功将自己的代码上传到开发板上了,然后通过串口成功的和单片机建立了单向连接(开发板向电脑发送数据),下一节我们学习下电脑向单片机发送消息。

最后还有几个小作业

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");
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6001

    文章

    43973

    浏览量

    620852
  • 开发板
    +关注

    关注

    25

    文章

    4430

    浏览量

    94011
  • 代码
    +关注

    关注

    30

    文章

    4555

    浏览量

    66772
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184839
  • ROS
    ROS
    +关注

    关注

    1

    文章

    271

    浏览量

    16681
收藏 人收藏

    评论

    相关推荐

    PC的QT怎样控制开发板的LED

    请问如何用电脑的QT界面控制S3C2440的驱动程序,使得LED灯亮?我PC机上用QT编写了一个程序,通过按键使得开发板
    发表于 09-02 10:32

    求推荐用于无线传发学习编写相关代码 开发板

    用于无线传发学习编写相关代码急需一块开发板.求推荐
    发表于 10-08 08:57

    iTOP-4412嵌入式开发板-以NFS方式调试应用程序

    生成 system.img,然后烧写 system.img 到开发板,然后启动开发板运行我们的程序,或者是通过 tftp 把执行文件下载到开发板。上面说的这两种方式操作起来都很麻烦,
    发表于 02-23 18:25

    makefile交叉编译helloword.bin然后开发板运行怎么操作?

    我想编译自己的应用程序开发板跑,看了手册里面只写到用Qt编译helloword.bin然后开发板
    发表于 12-31 07:26

    helloword测试程序下载到开发板里出现错误如何去解决呢

    helloword测试程序下载到开发板里面出现这种情况
    发表于 12-31 07:23

    开发板如何实现推流?怎么开发板安装FF MPEG ?

    开发板如何实现推流??开发板安装FF MPEG ?
    发表于 01-05 07:05

    helloword测试程序下载到开发板里面出现这种情况Segmentation fault是为什么?

    helloword测试程序下载到开发板里面出现这种情况Segmentation fault是为什么?
    发表于 01-13 06:29

    【平头哥RVB2601开发板试用体验】开发环境搭建+开发流程验证

    本帖最后由 jf_63540249 于 2022-1-19 23:59 编辑 1.开发板和芯片文档和代码资源下载OCC网站上有开发板和对应芯片的详细资料和SDK,网站地址:开发板
    发表于 01-19 23:49

    为Arduino UNO 开发板程序编写软件

    子程序 Arduino-sub.vi 分别编写 Arduino UNO开发板的程序代码。每一种类型均需考虑三种情况:定义、setup程序 和 loop 程序,按照顺序分别生成 Arduino
    发表于 05-23 15:25

    为 Arduino Mega 开发板程序编写软件

    。注:前面板红字部分暂未作处理,勾选后相当于弃用此端口。每一种类型均需考虑三种情况:定义、setup程序 和 loop 程序,按照顺序分别生成 Arduino 开发板的程序代码。附上所编写
    发表于 05-23 16:16

    为 Arduino UNO 开发板编写程序

    的程序代码。每一种类型均需考虑三种情况:定义、setup程序 和 loop 程序,按照顺序分别生成 Arduino 开发板的程序代码。附上所编写的 LabView 程序。
    发表于 05-23 16:20

    通过将小车接入MicroROS完成了一个遥控小车的开发

      一、新建工程  新建工程example24_ros2_car  修改配置  二、编写代码  代码使用 Esp32McpwmMotor 库初始化电机,设置 micro-ROS 通信参数以连接
    发表于 03-27 16:48

    如何使用代码控制开发板

      HarmonyOS Connect设备开发,相信不少刚入门的开发者都被这些问题所困扰,面对五花八门的开发板不知道该怎么选取?芯片、模组、开发板傻傻分不清?如何使用
    的头像 发表于 03-14 14:40 3090次阅读

    博流BL606P音视频开发板HelloWord Demo运行及跳线帽设置

    本文是关于开发者 kit7828 基于BL606P-DVK开发板实战开发的系列文章中的第一篇,主要介绍了环境搭建及HelloWord Demo运行,后面还会持续更新该
    的头像 发表于 05-15 15:25 653次阅读
    博流BL606P音视频<b class='flag-5'>开发板</b>:<b class='flag-5'>HelloWord</b> Demo运行及跳线帽设置

    如何微控制器上新建MicroROS节点

    你好,我是爱吃鱼香ROS的小鱼。上一节我们介绍了MicroROS和Agent的安装,本节我们开始正式编写代码,接入ROS2。
    的头像 发表于 07-15 16:52 648次阅读
    如何微控制器上新建<b class='flag-5'>MicroROS</b>节点