鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    MicroROS学习板CAN测试代码分享

    已定时 已固定 已锁定 已移动
    FishBot二驱机器人
    fishbot esp32 can
    1
    2
    510
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 小鱼小
      小鱼 技术大佬
      最后由 编辑

      MicroROS学习板CAN测试代码分享

      • 开发板:microros学习板
      • 开源库:https://github.com/miwagner/ESP32-Arduino-CAN.git
      • 收发芯片:VP230

      收发代码

      #include <Arduino.h>
      #include <ESP32CAN.h>
      #include <CAN_config.h>
      
      CAN_device_t CAN_cfg;               // CAN Config
      unsigned long previousMillis = 0;   // will store last time a CAN Message was send
      const int interval = 1000;          // interval at which send CAN Messages (milliseconds)
      const int rx_queue_size = 10;       // Receive Queue size
      
      void setup() {
        Serial.begin(115200);
        Serial.println("Basic Demo - ESP32-Arduino-CAN");
        CAN_cfg.speed = CAN_SPEED_1000KBPS;
        CAN_cfg.tx_pin_id = GPIO_NUM_5;
        CAN_cfg.rx_pin_id = GPIO_NUM_4;
        CAN_cfg.rx_queue = xQueueCreate(rx_queue_size, sizeof(CAN_frame_t));
        // Init CAN Module
        ESP32Can.CANInit();
      }
      
      void loop() {
      
        CAN_frame_t rx_frame;
      
        unsigned long currentMillis = millis();
      
        // Receive next CAN frame from queue
        if (xQueueReceive(CAN_cfg.rx_queue, &rx_frame, 3 * portTICK_PERIOD_MS) == pdTRUE) {
      
          if (rx_frame.FIR.B.FF == CAN_frame_std) {
            printf("New standard frame");
          }
          else {
            printf("New extended frame");
          }
      
          if (rx_frame.FIR.B.RTR == CAN_RTR) {
            printf(" RTR from 0x%08X, DLC %d\r\n", rx_frame.MsgID,  rx_frame.FIR.B.DLC);
          }
          else {
            printf(" from 0x%08X, DLC %d, Data ", rx_frame.MsgID,  rx_frame.FIR.B.DLC);
            for (int i = 0; i < rx_frame.FIR.B.DLC; i++) {
              printf("0x%02X ", rx_frame.data.u8[i]);
            }
            printf("\n");
          }
        }
        // Send CAN Message
        if (currentMillis - previousMillis >= interval) {
          previousMillis = currentMillis;
          CAN_frame_t tx_frame;
          tx_frame.FIR.B.FF = CAN_frame_std;
          tx_frame.MsgID = 0x001;
          tx_frame.FIR.B.DLC = 8;
          tx_frame.data.u8[0] = 0x00;
          tx_frame.data.u8[1] = 0x01;
          tx_frame.data.u8[2] = 0x02;
          tx_frame.data.u8[3] = 0x03;
          tx_frame.data.u8[4] = 0x04;
          tx_frame.data.u8[5] = 0x05;
          tx_frame.data.u8[6] = 0x06;
          tx_frame.data.u8[7] = 0x03;
          ESP32Can.CANWriteFrame(&tx_frame);
        }
      }
      

      新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

      小鱼小 1 条回复 最后回复 回复 引用 0
      • 小鱼小
        小鱼 技术大佬 @小鱼
        最后由 小鱼 编辑

        @小鱼 ESP32速率减半问题:

        https://www.esp32.com/viewtopic.php?t=15581
        https://github.com/sandeepmistry/arduino-CAN/issues/62
        https://github.com/sandeepmistry/arduino-CAN/issues/62
        google

        新书配套视频:https://www.bilibili.com/video/BV1GW42197Ck/

        1 条回复 最后回复 回复 引用 1
        • 第一个帖子
          最后一个帖子
        皖ICP备16016415号-7
        Powered by NodeBB | 鱼香ROS