esp32-c6使用教程wifi(espidf修改成arduino)附带代码websocket,舵机,点灯【2024年】

介绍

是最新模块c6的烧录教程,从espidf修改成arduino 然后还有我们的websocket 舵机等等控制程序

由于网上缺少c6的教程故做此详细教程,遇到问题可以评论区评论或者私信会很快回答你们的问题的

烧录教程

首先设置platfprmio.ini吧下面代码复制进行然后ctrl+s保存一下等他导包当然需要等待一会如果出现问题在重新跑一下(有梯子的可以用梯子毕竟是国外的github),因为要从espidf修改成arduino所要改配置

1.选择模块

选择esp32c6板子然后使用第一个下面还是选择Espidf 

1.platfprmio.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:esp32-c6-devkitc-1]
platform = https://github.com/sgryphon/platform-espressif32.git
board = esp32-c6-devkitc-1
board_frameworks = 
	espidf
	arduino
board_build.variant = esp32c6
framework = arduino
upload_speed = 921600
monitor_speed = 115200
monitor_filters = 
	direct
platform_packages = 
	framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#master
	platformio/framework-arduinoespressif32-libs @ https://github.com/espressif/esp32-arduino-libs.git#idf-release/v5.1
build_flags = 
	-D CONFIG_ARDUHAL_LOG_COLORS=1
	-D CORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_INFO

示例图:

2.设置后缀 吧src下的main.c修改成main.cpp

代码:


#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>


void setup() {
  
}



void loop() {

}
注意:

然后执行运行程序就可以跑起来了  就只需要修改这三个文件即可其他的不需要进行修改

#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
这几个库需要带着我也不知道为什么反正就是需要 ,当然也可以试试看不需要会怎么样有些时候也可以跑起来

实例代码:

开发板点灯:

(如果你的是开发板的话可以使用这个代码):

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>

void setup() {

}

void loop() {
    log_i("hello world");
    neopixelWrite(RGB_BUILTIN, 255, 0, 0);  //设置显示颜色为红色

    delay(500);
    neopixelWrite(RGB_BUILTIN, 255, 165, 0);
    delay(500);
    neopixelWrite(RGB_BUILTIN, 255, 255, 0);
    delay(500);
    neopixelWrite(RGB_BUILTIN, 0, 255, 0);
    delay(500);
    neopixelWrite(RGB_BUILTIN, 0, 127, 255);
    delay(500);
    neopixelWrite(RGB_BUILTIN, 0, 0, 255);
    delay(500);
    neopixelWrite(RGB_BUILTIN, 139, 0, 255);
    delay(500);
}

2.输出语句:

#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
//#include <string>
//#include <WebSocketsClient.h>

void setup() {

    Serial.begin(115200);  // 初始化串口通信
    delay(1000);  // 等待串口初始化

    log_e("开始连接wiff");
    log_e("wiff");
    log_e("yes:wiff");
}

void loop() {
    Serial.println("中文"); // 正确,支持中文
    Serial.println("你好啊");
    delay(1000);  // 添加延迟,避免串口输出过快
}

3.控制舵机移动

让舵机从0-180度移动


#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
#include <string>
#include <WebSocketsClient.h>

// 定义舵机控制引脚
const int servoPin = 18;

// 定义舵机角度对应的脉宽范围
const int minPulseWidth = 500;  // 0度时的脉宽,单位微秒
const int maxPulseWidth = 2500; // 180度时的脉宽,单位微秒
void setServoAngle(int angle);
void setup() {
    Serial.begin(115200);  // 初始化串口通信
    pinMode(servoPin, OUTPUT);
}

void loop() {
    // 示例:移动舵机到0度、90度、180度并保持1秒
    Serial.println("0"); // 正确,支持中文
    setServoAngle(0);
    delay(1000);


    Serial.println("45"); // 正确,支持中文
    setServoAngle(45);
    delay(1000);





    Serial.println("90"); // 正确,支持中文

    setServoAngle(90);
    delay(1000);


    Serial.println("135"); // 正确,支持中文
    setServoAngle(135);
    delay(1000);

    Serial.println("180"); // 正确,支持中文

    setServoAngle(180);
    delay(2000);
}

void setServoAngle(int angle) {
    // 将角度转换为对应的脉宽
    int pulseWidth = map(angle, 0, 180, minPulseWidth, maxPulseWidth);

    // 发送脉宽信号
    digitalWrite(servoPin, HIGH);
    delayMicroseconds(pulseWidth);
    digitalWrite(servoPin, LOW);

    // 保持20ms周期
    delay(20);
}

4.使用websocket进行esp32通信 

1.下载websocket

比如我这里项目名字是c1那么就要选择c1更具你的项目选择给哪个

然后导入下面代码更具你的配置进行修改代码



#include <Arduino.h>
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
#include <string>
#include <WebSocketsClient.h>


WiFiMulti WiFiMulti;
WebSocketsClient webSocket;

#define USE_SERIAL Serial1


String ssid="c1";  //wifi账号
String passphrase="00000000";  //wifi密码
// --------------------------------
int port=13001; //websocket端口
String ip="192.168.187.215"; //websocket地址
String uid="20003";  //这个是我自己的程序可以不要

// -----------------------------------
void hexdump(const void *mem, uint32_t len, uint8_t cols = 16) { //用于以十六进制格式打印内存中的数据
    const uint8_t* src = (const uint8_t*) mem;
    USE_SERIAL.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src, len, len);
    for(uint32_t i = 0; i < len; i++) {
        if(i % cols == 0) {
            USE_SERIAL.printf("\n[0x%08X] 0x%08X: ", (ptrdiff_t)src, i);
        }
        USE_SERIAL.printf("%02X ", *src);
        src++;
    }
    USE_SERIAL.printf("\n");
}



void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {

    switch(type) {
        case WStype_DISCONNECTED: //WebSocket 连接断开事件
            USE_SERIAL.printf("[WSc] Disconnected!\n");
              log_e("websocket服务器掉线!");
            break;
        case WStype_CONNECTED:  //WebSocket 连接成功事件
            log_i("发送消息");

            // send message to server when Connected
            webSocket.sendTXT("进行消息连接发生消息");
            break;
        case WStype_TEXT:  //收到文本消息事件
            USE_SERIAL.printf("[WSc] 接收到服务器发送的消息: %s\n", payload);

            // send message to server
            // webSocket.sendTXT("message here");
            break;
        case WStype_BIN: //收到二进制数据事件
            USE_SERIAL.printf("[WSc] get binary length: %u\n", length);
            hexdump(payload, length);

            // send data to server
            // webSocket.sendBIN(payload, length);
            break;
        case WStype_ERROR:          //WebSocket 客户端发生错误的事件
        case WStype_FRAGMENT_TEXT_START:   //表示接收到文本消息的分片数据的起始事件。
        case WStype_FRAGMENT_BIN_START:   //表示接收到二进制数据的分片数据的起始事件。
        case WStype_FRAGMENT:   // 表示接收到消息的中间分片数据事件
        case WStype_FRAGMENT_FIN:  //表示接收到消息的结束分片数据事件
            break;
    }

}

void setup() {
    // USE_SERIAL.begin(921600);
    USE_SERIAL.begin(115200);

    //Serial.setDebugOutput(true);
    USE_SERIAL.setDebugOutput(false); //串口调试输出后面要关闭


    WiFiMulti.addAP(ssid.c_str(), passphrase.c_str());
    //WiFi.disconnect();
    log_e("开始连接wiff");

    while(WiFiMulti.run() != WL_CONNECTED) {
        log_i(".");
        delay(100);
    }
    log_e("连接wiff成功!");

    // 第一个是ip  第二个是端口号 第三个是后面需要拼接的东西
    webSocket.begin(ip, port, "/api/websocket/"+uid+"/machine");
    //"/api/websocket/"+uid+"/machine" 是配置后缀 比如这个是  ws://192.168.187.215:13001/api/websocket/1023/machine
        
    // event handler
    webSocket.onEvent(webSocketEvent);
    log_e("连接websocket成功!");

    // use HTTP Basic Authorization this is optional remove if not needed
    // webSocket.setAuthorization("1", "1");

    // try ever 5000 again if connection has failed
    webSocket.setReconnectInterval(2000);

}


unsigned long lastMsgTime = 0;
const int msgInterval = 1000;  // 1秒
void loop() {
    webSocket.loop();



    unsigned long now = millis();
    if (now - lastMsgTime > msgInterval) {
        lastMsgTime = now;
        webSocket.sendTXT("1");  // 发送消息给服务器告诉服务器还或则
    }
}

  • 25
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游迹AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值