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

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

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

如何實(shí)現(xiàn)對(duì)開(kāi)發(fā)板上LED的控制

CHANBAEK ? 來(lái)源:魚(yú)香ROS ? 作者:小魚(yú) ? 2023-07-15 16:54 ? 次閱讀

你好,我是愛(ài)吃魚(yú)香ROS的小魚(yú)。本節(jié)我們正式進(jìn)入到MicroROS的核心通信部分的學(xué)習(xí)中來(lái),本節(jié)我們將通過(guò)話(huà)題訂閱,實(shí)現(xiàn)通過(guò)話(huà)題控制LED的亮滅。

硬件開(kāi)發(fā)平臺(tái)

為方便學(xué)習(xí),本教程配套的硬件是小魚(yú)自制的MicroROS學(xué)習(xí)板,同時(shí)該板可以作為下一章節(jié)搭建實(shí)體移動(dòng)機(jī)器人的主控板以及后續(xù)制作機(jī)械臂的驅(qū)動(dòng)板使用。

板載資源圖如下:

圖片

該主控板可以在小魚(yú)的店鋪直接購(gòu)買(mǎi),性?xún)r(jià)比接地氣,點(diǎn)擊左下角閱讀原文直達(dá)魚(yú)香小鋪。

一、新建工程添加依賴(lài)

新建example11_microros_topic_sub工程

圖片

修改platformio.ini添加依賴(lài)

; PlatformIO Project Configuration File
;
;   Build options: build flags, source filter
;   Upload options: custom upload port, speed and extra flags
;   Library options: dependencies, extra library storages
;   Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html


[env:featheresp32]
platform = espressif32
board = featheresp32
framework = arduino
lib_deps = 
    https://gitee.com/ohhuo/micro_ros_platformio.git

二、編寫(xiě)代碼-實(shí)現(xiàn)訂閱

編輯main.cpp,代碼如下,注釋小魚(yú)已經(jīng)添加到代碼中來(lái)了

#include < Arduino.h >
#include < micro_ros_platformio.h >


#include < rcl/rcl.h >
#include < rclc/rclc.h >
#include < rclc/executor.h >


#include < std_msgs/msg/int32.h >


rclc_executor_t executor;
rclc_support_t support;
rcl_allocator_t allocator;
rcl_node_t node;
// 聲明話(huà)題訂閱者
rcl_subscription_t subscriber;
// 聲明消息文件
std_msgs__msg__Int32 sub_msg;
// 定義話(huà)題接收回調(diào)函數(shù)
void callback_subscription_(const void *msgin)
{
  const std_msgs__msg__Int32 *msg = (const std_msgs__msg__Int32 *)msgin;
  if (msg- >data == 0)
  {
    digitalWrite(2, HIGH);
  }
  else
  {
    digitalWrite(2, LOW);
  }
}


void setup()
{
  Serial.begin(115200);
  // 設(shè)置通過(guò)串口進(jìn)行MicroROS通信
  set_microros_serial_transports(Serial);
  // 延時(shí)時(shí)一段時(shí)間,等待設(shè)置完成
  delay(2000);
  // 初始化內(nèi)存分配器
  allocator = rcl_get_default_allocator();
  // 創(chuàng)建初始化選項(xiàng)
  rclc_support_init(&support, 0, NULL, &allocator);
  // 創(chuàng)建節(jié)點(diǎn) topic_sub_test
  rclc_node_init_default(&node, "topic_sub_test", "", &support);
  // 訂閱者初始化
  rclc_subscription_init_default(
      &subscriber,
      &node,
      ROSIDL_GET_MSG_TYPE_SUPPORT(std_msgs, msg, Int32),
      "led_control");
  // 創(chuàng)建執(zhí)行器
  rclc_executor_init(&executor, &support.context, 1, &allocator);
  // 為執(zhí)行器添加一個(gè)訂閱者
  rclc_executor_add_subscription(&executor, &subscriber, &sub_msg, &callback_subscription_, ON_NEW_DATA);
  // 初始化LED
  pinMode(2, OUTPUT);
}


void loop()
{
  delay(100);
  // 循環(huán)處理數(shù)據(jù)
  rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100));
}

三、代碼注解

相比之前的節(jié)點(diǎn)代碼這里主要多了這幾行

?#include 添加消息類(lèi)型頭文件

?rcl_subscription_t subscriber; 聲明話(huà)題訂閱者

?std_msgs__msg__Int32 sub_msg; 聲明消息文件,這一點(diǎn)和上位機(jī)不同,因?yàn)閮?nèi)存緊缺,所以提前定義

?void callback_subscription_(const void *msgin) 接收到數(shù)據(jù)的回調(diào)函數(shù)

?rclc_subscription_init_default 初始化話(huà)題訂閱者

?rclc_executor_add_subscription(&executor, &subscriber, &sub_msg, &callback_subscription_, ON_NEW_DATA);,為執(zhí)行器添加一個(gè)訂閱者

四、下載測(cè)試

4.1 編譯下載

連接開(kāi)發(fā)板,編譯下載。

圖片

4.2 啟動(dòng)Agent

接著打開(kāi)終端啟動(dòng)agent

sudo docker run -it --rm -v /dev:/dev -v /dev/shm:/dev/shm --privileged --net=host microros/micro-ros-agent:$ROS_DISTRO serial --dev /dev/ttyUSB0 -v

點(diǎn)擊下RST按鈕,重啟開(kāi)發(fā)板,正常可以看到下圖內(nèi)容

圖片

4.3 查看是否連通

接著打開(kāi)終端查看節(jié)點(diǎn)和話(huà)題

ros2 node list
ros2 topic list

4.4 測(cè)試控制

關(guān)閉LED

ros2 topic pub /led_control  std_msgs/msg/Int32 "{data: 0}" --once

打開(kāi)LED

ros2 topic pub /led_control  std_msgs/msg/Int32 "{data: 1}" --once

五、總結(jié)

本節(jié)我們通過(guò)話(huà)題訂閱,實(shí)現(xiàn)對(duì)開(kāi)發(fā)板上LED的控制,下一節(jié)我們將嘗試讀取開(kāi)發(fā)板上的VM引腳電壓,并將其通過(guò)話(huà)題發(fā)布到上位機(jī)中。

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

    關(guān)注

    240

    文章

    23063

    瀏覽量

    657067
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    28103

    瀏覽量

    205853
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4897

    瀏覽量

    97060
  • 學(xué)習(xí)板
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

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

    關(guān)注

    1

    文章

    276

    瀏覽量

    16942
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于OpenHarmony開(kāi)發(fā)板測(cè)試Native C++應(yīng)用開(kāi)發(fā)

    本文主要分享在軟通動(dòng)力揚(yáng)帆系列“競(jìng)”O(jiān)penHarmony開(kāi)發(fā)板測(cè)試Native C++應(yīng)用開(kāi)發(fā)實(shí)現(xiàn)eTS調(diào)用Native C++ 程序實(shí)現(xiàn)
    的頭像 發(fā)表于 10-08 14:37 ?3844次閱讀

    FTHR-G0140開(kāi)發(fā)板LED點(diǎn)燈

    FTHR-G0140開(kāi)發(fā)板LED點(diǎn)燈;這個(gè)例程是基于MiniBoard (MM32G0141C4PV)的,所要修改PIN才能工作。經(jīng)查看開(kāi)發(fā)板L
    的頭像 發(fā)表于 06-05 12:54 ?21.8w次閱讀
    FTHR-G0140<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>LED</b>點(diǎn)燈

    PC的QT怎樣控制開(kāi)發(fā)板LED

    請(qǐng)問(wèn)如何用電腦的QT界面控制S3C2440的驅(qū)動(dòng)程序,使得LED燈亮?我在PC機(jī)上用QT編寫(xiě)了一個(gè)程序,通過(guò)按鍵使得開(kāi)發(fā)板
    發(fā)表于 09-02 10:32

    用手機(jī)遙控開(kāi)發(fā)板LED

    開(kāi)發(fā)板通過(guò)一個(gè)藍(lán)牙串口模塊接收手機(jī)藍(lán)牙控制信號(hào)控制開(kāi)發(fā)板
    發(fā)表于 12-04 10:48

    【FireBeetle 2 ESP32-S3開(kāi)發(fā)板體驗(yàn)】串口控制LED

    .value(0) 【實(shí)現(xiàn)效果】 用TTL轉(zhuǎn)串口接到開(kāi)發(fā)板后,發(fā)送on、off就實(shí)現(xiàn)對(duì)開(kāi)發(fā)板LED燈的關(guān)與開(kāi)。
    發(fā)表于 07-28 23:09

    開(kāi)發(fā)板LED燈閃爍起來(lái)吧

    這節(jié)課給大家講一下如何讓開(kāi)發(fā)板上網(wǎng)絡(luò)編號(hào)為 D4 LED 燈閃爍起來(lái),先看一下開(kāi)發(fā)板上關(guān)于 LED 的原理圖
    發(fā)表于 11-11 17:17 ?13次下載

    代碼控制開(kāi)發(fā)板LED:STM32跑馬燈試驗(yàn)

    STM32F103跑馬燈實(shí)驗(yàn)。本實(shí)驗(yàn)通過(guò)代碼控制開(kāi)發(fā)板的兩個(gè)LED:DS0和DS1交替閃爍,實(shí)現(xiàn)類(lèi)似跑馬燈的效果。
    發(fā)表于 08-31 10:52 ?26次下載

    分析ARM開(kāi)發(fā)板哪家好

    目前市場(chǎng)上有許多ARM開(kāi)發(fā)板生產(chǎn)商,市面上也有許許多多不同系列。不免有時(shí)候面對(duì)開(kāi)發(fā)板的選擇時(shí)犯難,阿么ARM開(kāi)發(fā)板該如何選擇呢?下面針對(duì)幾家廠商進(jìn)行分析?
    發(fā)表于 10-26 14:28 ?1.8w次閱讀

    HC6800-ES V2.0開(kāi)發(fā)板的介紹及使用資料說(shuō)明

    通過(guò)前面對(duì)開(kāi)發(fā)板結(jié)構(gòu)的了解,知道此款開(kāi)發(fā)板擁有的模塊及接口比較多,每個(gè)模塊或接口都能實(shí)現(xiàn)對(duì)應(yīng)的功能
    發(fā)表于 03-26 14:35 ?60次下載
    HC6800-ES V2.0<b class='flag-5'>開(kāi)發(fā)板</b>的介紹及使用資料說(shuō)明

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

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

    【時(shí)擎科技AT1000開(kāi)發(fā)板試用體驗(yàn)】時(shí)擎科技AT1000 DEV開(kāi)發(fā)板 – 燒錄工具

    時(shí)擎科技AT1000 DEV 開(kāi)發(fā)板 ?– 燒錄工具 ? 本次時(shí)擎科技開(kāi)發(fā)板獲取的官方資料特別少,以至于不能很好的對(duì)開(kāi)發(fā)板由一個(gè)清晰的了解。 ? 本文將簡(jiǎn)單介紹時(shí)擎開(kāi)發(fā)板的燒錄工具mu
    的頭像 發(fā)表于 11-22 11:23 ?1116次閱讀
    【時(shí)擎科技AT1000<b class='flag-5'>開(kāi)發(fā)板</b>試用體驗(yàn)】時(shí)擎科技AT1000 DEV<b class='flag-5'>開(kāi)發(fā)板</b> – 燒錄工具

    通過(guò)Web網(wǎng)頁(yè)控制開(kāi)發(fā)板LED

    接下來(lái)將介紹如何通過(guò)Web網(wǎng)頁(yè)來(lái)控制開(kāi)發(fā)板LED燈,本文只是在網(wǎng)頁(yè)實(shí)現(xiàn)功能,并無(wú)交互功能,
    的頭像 發(fā)表于 04-25 15:05 ?1523次閱讀
    通過(guò)Web網(wǎng)頁(yè)<b class='flag-5'>控制</b><b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>LED</b>燈

    【Start_DSC28034PNT湖人開(kāi)發(fā)板免費(fèi)體驗(yàn)】+湖人開(kāi)發(fā)板功耗測(cè)試

    開(kāi)發(fā)板無(wú)法解決下載問(wèn)題之前,只好先對(duì)開(kāi)發(fā)板的功耗進(jìn)行一下測(cè)試。
    的頭像 發(fā)表于 07-10 09:07 ?561次閱讀
    【Start_DSC28034PNT湖人<b class='flag-5'>開(kāi)發(fā)板</b>免費(fèi)體驗(yàn)】+湖人<b class='flag-5'>開(kāi)發(fā)板</b>功耗測(cè)試

    如何在開(kāi)發(fā)板實(shí)現(xiàn)話(huà)題發(fā)布流程

    你好,我是愛(ài)吃魚(yú)香ROS的小魚(yú)。本節(jié)將學(xué)習(xí)在開(kāi)發(fā)板實(shí)現(xiàn)話(huà)題的發(fā)布,最終實(shí)現(xiàn)通過(guò)話(huà)題發(fā)布當(dāng)前開(kāi)發(fā)板的電池電量信息,關(guān)于電量信息的測(cè)量,請(qǐng)參考
    的頭像 發(fā)表于 07-15 16:56 ?602次閱讀
    如何在<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>上</b><b class='flag-5'>實(shí)現(xiàn)</b>話(huà)題發(fā)布流程

    S3C2440開(kāi)發(fā)板實(shí)現(xiàn)按鍵點(diǎn)亮LED驅(qū)動(dòng)開(kāi)發(fā)的詳細(xì)過(guò)程

    電子發(fā)燒友網(wǎng)站提供《S3C2440開(kāi)發(fā)板實(shí)現(xiàn)按鍵點(diǎn)亮LED驅(qū)動(dòng)開(kāi)發(fā)的詳細(xì)過(guò)程.pdf》資料免費(fèi)下載
    發(fā)表于 10-11 09:36 ?0次下載
    S3C2440<b class='flag-5'>開(kāi)發(fā)板</b><b class='flag-5'>上</b><b class='flag-5'>實(shí)現(xiàn)</b>按鍵點(diǎn)亮<b class='flag-5'>LED</b>驅(qū)動(dòng)<b class='flag-5'>開(kāi)發(fā)</b>的詳細(xì)過(guò)程