介绍
是最新模块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"); // 发送消息给服务器告诉服务器还或则
}
}