<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

如何實現對開發板上LED的控制

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

你好,我是愛吃魚香ROS的小魚。本節我們正式進入到MicroROS的核心通信部分的學習中來,本節我們將通過話題訂閱,實現通過話題控制LED的亮滅。

硬件開發平臺

為方便學習,本教程配套的硬件是小魚自制的MicroROS學習板,同時該板可以作為下一章節搭建實體移動機器人的主控板以及后續制作機械臂的驅動板使用。

板載資源圖如下:

圖片

該主控板可以在小魚的店鋪直接購買,性價比接地氣,點擊左下角閱讀原文直達魚香小鋪。

一、新建工程添加依賴

新建example11_microros_topic_sub工程

圖片

修改platformio.ini添加依賴

; 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

二、編寫代碼-實現訂閱

編輯main.cpp,代碼如下,注釋小魚已經添加到代碼中來了

#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;
// 聲明話題訂閱者
rcl_subscription_t subscriber;
// 聲明消息文件
std_msgs__msg__Int32 sub_msg;
// 定義話題接收回調函數
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);
  // 設置通過串口進行MicroROS通信
  set_microros_serial_transports(Serial);
  // 延時時一段時間,等待設置完成
  delay(2000);
  // 初始化內存分配器
  allocator = rcl_get_default_allocator();
  // 創建初始化選項
  rclc_support_init(&support, 0, NULL, &allocator);
  // 創建節點 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");
  // 創建執行器
  rclc_executor_init(&executor, &support.context, 1, &allocator);
  // 為執行器添加一個訂閱者
  rclc_executor_add_subscription(&executor, &subscriber, &sub_msg, &callback_subscription_, ON_NEW_DATA);
  // 初始化LED
  pinMode(2, OUTPUT);
}


void loop()
{
  delay(100);
  // 循環處理數據
  rclc_executor_spin_some(&executor, RCL_MS_TO_NS(100));
}

三、代碼注解

相比之前的節點代碼這里主要多了這幾行

?#include 添加消息類型頭文件

?rcl_subscription_t subscriber; 聲明話題訂閱者

?std_msgs__msg__Int32 sub_msg; 聲明消息文件,這一點和上位機不同,因為內存緊缺,所以提前定義

?void callback_subscription_(const void *msgin) 接收到數據的回調函數

?rclc_subscription_init_default 初始化話題訂閱者

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

四、下載測試

4.1 編譯下載

連接開發板,編譯下載。

圖片

4.2 啟動Agent

接著打開終端啟動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

點擊下RST按鈕,重啟開發板,正??梢钥吹较聢D內容

圖片

4.3 查看是否連通

接著打開終端查看節點和話題

ros2 node list
ros2 topic list

4.4 測試控制

關閉LED

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

打開LED

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

五、總結

本節我們通過話題訂閱,實現對開發板上LED的控制,下一節我們將嘗試讀取開發板上的VM引腳電壓,并將其通過話題發布到上位機中。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • led
    led
    +關注

    關注

    237

    文章

    22574

    瀏覽量

    647063
  • 機器人
    +關注

    關注

    207

    文章

    27310

    瀏覽量

    202133
  • 開發板
    +關注

    關注

    25

    文章

    4574

    瀏覽量

    94975
  • 學習板
    +關注

    關注

    0

    文章

    40

    瀏覽量

    12089
  • ROS
    ROS
    +關注

    關注

    1

    文章

    273

    瀏覽量

    16783
收藏 人收藏

    評論

    相關推薦

    PC的QT怎樣控制開發板LED

    請問如何用電腦的QT界面控制S3C2440的驅動程序,使得LED燈亮?我在PC機上用QT編寫了一個程序,通過按鍵使得開發板
    發表于 09-02 10:32

    【轉載】iTOP-4412開發板LED驅動實現

    本帖最后由 Somnus_H 于 2016-1-8 11:12 編輯 本文轉自:http://www.topeetboard.com/iTOP-4412開發板是如何控制LED發光二極管
    發表于 01-08 11:09

    求教!關于Simulink模型對開發板的編譯和燒寫!

    代碼,燒寫進開發板。我會用到can,rs232,rs485,USB等通信接口,開發板初步想的是用STM32的。一些做控制器的廠家這樣一整套設備就要近十萬,所以不知道這個實現難度怎么樣。
    發表于 10-20 14:32

    用手機遙控開發板LED

    開發板通過一個藍牙串口模塊接收手機藍牙控制信號控制開發板
    發表于 12-04 10:48

    如何去實現開發板LED流水燈的功能

    LED模塊是通過什么來控制的?如何去實現開發板LED流水燈的功能?
    發表于 08-03 06:17

    如何在開發板實現控制掃碼模塊

    本程序編寫基于正點原子STM32F407開發板。本文使用的掃碼模塊是下面這個品牌。掃碼模塊的應用場景非常廣泛,我們可以上百度搜索一下:等等。今天就來說說如何在開發板實現
    發表于 08-05 08:06

    如何對STM32芯片的開發板LED燈進行控制

    本文將在前面mini2440建立的domoticz、mosquitto為服務器的基礎,以Android做遠程客戶端來實現對STM32芯片的開發板LED進行燈
    發表于 08-05 08:25

    如何去實現基于STM32開發板去點亮LED的設計

    如何去實現基于STM32開發板去點亮LED的設計?控制LED燈的步驟有哪些?
    發表于 11-03 07:01

    如何去實現對STM32芯片的開發板LED進行燈控制

    如何去實現對STM32芯片的開發板LED進行燈控制呢?有什么辦法嗎?
    發表于 11-03 06:50

    如何利用阿里云物聯網平臺控制開發板LED開關功能呢

    如何去調試一塊stm32+w5500開發板呢?如何利用阿里云物聯網平臺控制開發板LED開關功能呢?
    發表于 12-01 07:56

    開發板如何實現推流?怎么在開發板安裝FF MPEG ?

    開發板如何實現推流??在開發板安裝FF MPEG ?
    發表于 01-05 07:05

    【FireBeetle 2 ESP32-S3開發板體驗】串口控制LED

    .value(0) 【實現效果】 用TTL轉串口接到開發板后,發送on、off就實現對開發板LED燈的關與開。
    發表于 07-28 23:09

    【涂鴉T2-U開發板試用體驗】涂鴉APP控制板LED

    本帖最后由 1653149838.791300 于 2023-11-12 22:52 編輯 前面講了開發環境搭建,那這接著做一個應用:用涂鴉的app控制開發板
    發表于 11-12 18:13

    【ELF 1開發板試用】+ RGB LED及按鍵的控制

    1開發板,自然也不會少了它,其在開發板的位置如圖1所示,共有3個,其顏色分別為紅、綠、黃3個色彩。 圖1LED燈 3個
    發表于 11-21 11:11

    通過Web網頁控制開發板LED

    接下來將介紹如何通過Web網頁來控制開發板上的LED燈,本文只是在網頁上實現功能,并無交互功能,與開發板的交互功能
    的頭像 發表于 04-25 15:05 ?1315次閱讀
    通過Web網頁<b class='flag-5'>控制</b><b class='flag-5'>開發板</b><b class='flag-5'>LED</b>燈
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>