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

    hc-12无线串口运用与矩阵映射

    已定时 已固定 已锁定 已移动
    FishBot四驱机器人V2
    hc-12 矩阵映射
    2
    8
    189
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • L
      lin_nyy
      最后由 编辑

      如何使用hc-12无线串口,实现小车与电脑的无线通讯,串口的矩阵映射如何实现?```
      #include <Arduino.h>
      #include <Esp32McpwmMotor.h>
      #include <Esp32PcntEncoder.h>
      #include "PidController.h"
      #include <HardwareSerial.h>

      // #define HC_RX 37 // UART2的RX引脚
      // #define HC_TX 38 // UART2的TX引脚

      // HardwareSerial HC12(2);
      Esp32McpwmMotor motor;
      Esp32PcntEncoder encoders[4];
      PidController pid_controller[4];

      // 运动控制参数
      const float wheel_diameter = 0.065;
      const float pulses_per_rev = 1978.0f;
      const float wheel_circumference = PI * wheel_diameter;
      const float pulse_distance = wheel_circumference / pulses_per_rev;
      const float wheel_base = 0.188f;

      enum MotionState { STOPPED, MOVING_FORWARD, MOVING_BACKWARD, ROTATING }; // 新增后退状态
      MotionState currentState = STOPPED;

      unsigned long stopStartTime = 0;
      int currentCommand = 0;
      int taskStep = 0;
      int64_t initial_ticks[4] = {0};
      float target_distance = 0;
      float target_angle = 0;

      void setup() {
      // Serial.begin(115200);
      Serial.begin(9600,SERIAL_8N1,37,38);
      // HC12.begin(9600, SERIAL_8N1, HC_RX, HC_TX);

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

        @lin_nyy 在 hc-12无线串口运用与矩阵映射 中说:

        Serial.begin(9600,SERIAL_8N1,37,38);

        理论上这样就可以了,也可以使用Serial1

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

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

          @lin_nyy 建议他先搞一个USB转TTL的模块,先调试一下串口通信是否正常

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

          1 条回复 最后回复 回复 引用 0
          • L
            lin_nyy @小鱼
            最后由 编辑

            @小鱼 试了,无法正常通讯,想看看矩阵映射的原函数在哪,或者有没有历程

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

              @lin_nyy 用Seria1试试,另外怎么测试的,源码贴出来看看

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

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

                @lin_nyy 另外esp32带BLE蓝牙功能

                #include <NimBLEDevice.h>
                
                #define SERVICE_UUID        "6E400001-B5A3-F393-E0A9-E50E24DCCA9E"
                #define CHARACTERISTIC_RX   "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"
                #define CHARACTERISTIC_TX   "6E400003-B5A3-F393-E0A9-E50E24DCCA9E"
                
                NimBLECharacteristic* pTxCharacteristic;
                
                class ServerCallbacks : public NimBLEServerCallbacks {
                  void onConnect(NimBLEServer* pServer) {
                    Serial.println("Client connected");
                  }
                
                  void onDisconnect(NimBLEServer* pServer) {
                    Serial.println("Client disconnected");
                  }
                };
                
                class RxCallbacks : public NimBLECharacteristicCallbacks {
                  void onWrite(NimBLECharacteristic* pCharacteristic) {
                    std::string rxValue = pCharacteristic->getValue();
                    if (rxValue.length() > 0) {
                      Serial.print("Received: ");
                      Serial.println(rxValue.c_str());
                      // Echo back
                      pTxCharacteristic->setValue(rxValue);
                      pTxCharacteristic->notify();
                    }
                  }
                };
                
                void setup() {
                  Serial.begin(115200);
                  Serial.println("Starting BLE UART");
                
                  NimBLEDevice::init("ESP32S3-BLE-UART");
                  NimBLEServer* pServer = NimBLEDevice::createServer();
                  pServer->setCallbacks(new ServerCallbacks());
                
                  NimBLEService* pService = pServer->createService(SERVICE_UUID);
                
                  pTxCharacteristic = pService->createCharacteristic(
                    CHARACTERISTIC_TX,
                    NIMBLE_PROPERTY::NOTIFY
                  );
                
                  NimBLECharacteristic* pRxCharacteristic = pService->createCharacteristic(
                    CHARACTERISTIC_RX,
                    NIMBLE_PROPERTY::WRITE
                  );
                
                  pRxCharacteristic->setCallbacks(new RxCallbacks());
                
                  pService->start();
                  NimBLEAdvertising* pAdvertising = NimBLEDevice::getAdvertising();
                  pAdvertising->addServiceUUID(SERVICE_UUID);
                  pAdvertising->start();
                
                  Serial.println("Waiting for client to connect...");
                }
                
                void loop() {
                  delay(1000);
                }
                

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

                1 条回复 最后回复 回复 引用 0
                • L
                  lin_nyy @小鱼
                  最后由 编辑

                  @小鱼 好的,没试过用serial2,晚些试一试,然后请问像这样的可以调用的rx,tx还有多少对?我记得esp32只有3个uart是吧,但好像不是每个都能调用

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

                    @lin_nyy serial serial1 serial2

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

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