https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers
CP210x USB to UART Bridge VCP Drivers - Silicon Labs
The CP210x USB to UART Bridge Virtual COM Port (VCP) drivers are required for device operation as a Virtual COM Port to facilitate host communication with CP210x products. These devices can also interface to a host using the direct access driver.
www.silabs.com
이거 다운 받으시고~
아두이노 라이브러리 esp 32다운받으시고
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_dev_index.json
요고 링크 넣어주시면 됩니다.
그러면 port가 뜰거에요!~셋업 완료.
ESP32 와 I2C bus 사용하기
/*MIT License
Copyright (c) 2024 JD edu. http://jdedu.kr author: conner.jeong@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN TH
SOFTWARE.*/
#include "Adafruit_VL53L0X.h"
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
void setup() {
Serial.begin(115200);
Serial.println("Adafruit VL53L0X test...");
if (!lox.begin()) {
Serial.println(F("Failed to boot VL53L0X"));
while(1);
}
// power
Serial.println(F("VL53L0X test OK..."));
}
void loop() {
VL53L0X_RangingMeasurementData_t measure;
Serial.print("Reading a measurement... ");
lox.rangingTest(&measure, false); // pass in 'true' to get debug data printout!
if (measure.RangeStatus != 4) { // phase failures have incorrect data
Serial.print("Distance (mm): "); Serial.println(measure.RangeMilliMeter);
} else {
Serial.println(" out of range ");
}
delay(100);
}
[ESP32] 자료정리 (Pin map) : 네이버 블로그 (naver.com)
[ESP32] 자료정리 (Pin map)
ESP32를 살펴보고 있습니다. 나이가 먹어감에 따라 기억력이 점점(많이) 떨어집니다. 마치 단기 기억상...
blog.naver.com
핀맵은 여길 참고 했습니다.
미션!! 부저를 울리는것!!
하지만 지금은 개같이 실패...
ESP32로 Socket통신하기!!
와이파이 맞춰주고!!
#include <WiFi.h>
#define ssid "ConnectValue_C402_2G"
#define password "CVC402!@#$"
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println(".");
}
Serial.print("WiFi connected with IP:");
Serial.println(WiFi.localIP());
}
void loop() {
WiFiClient client;
if(!client.connect(IPAddress(172,30,1,77), 10000)){
// if (!client.connect("192.168.1.68", 10000)) {
Serial.println("Connection to host failed");
delay(1000);
return;
}
//Serial.println("client connected sending packet");
if(Serial.available()>0){
char c = Serial.read();
if(c == 'a'){
client.print("'a' is sent!");
}else if(c == 'b'){
client.print("'b' is sent!");
}
}
//client.print("Hello from ESP32!");
client.stop();
delay(100);
}
import socket
print("Creating server...")
s = socket.socket()
s.bind(('0.0.0.0', 10000))
s.listen(0)
while True:
client, addr = s.accept()
while True:
content = client.recv(6)
if len(content) == 0:
client.send("uga".encode())
break
else:
print(content.decode())
#print("Closing connection")
client.close()
서버를 먼저 켜주고
esp32에서 업로드해주십쇼. 그리고 시리얼모니터에서 a키를 누르면 vs코드 터미널에 보내진 문자를 확인 할 수 있습니다.
이번엔 와이파이로 연결합니다~
//https://shawnhymel.com/1675/arduino-websocket-server-using-an-esp32/
// websockets library by Markus Sattler
#include <WiFi.h>
#include <WebSocketsServer.h>
#define ssid "ConnectValue_C402_2G"
#define password "CVC402!@#$"
WebSocketsServer webSocket = WebSocketsServer(80);
// Called when receiving any WebSocket message
void onWebSocketEvent(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
// Figure out the type of WebSocket event
switch(type) {
// Client has disconnected
case WStype_DISCONNECTED:
Serial.printf("[%u] Disconnected!\n", num);
break;
// New client has connected
case WStype_CONNECTED:
{
IPAddress ip = webSocket.remoteIP(num);
Serial.printf("[%u] Connection from ", num);
Serial.println(ip.toString());
}
break;
// Echo text message back to client
case WStype_TEXT:
Serial.printf("[%u] Text: %s\n", num, payload);
webSocket.sendTXT(num, payload);
break;
// For everything else: do nothing
case WStype_BIN:
case WStype_ERROR:
case WStype_FRAGMENT_TEXT_START:
case WStype_FRAGMENT_BIN_START:
case WStype_FRAGMENT:
case WStype_FRAGMENT_FIN:
default:
break;
}
}
void setup() {
// Start Serial port
Serial.begin(115200);
// Connect to access point
Serial.println("Connecting");
WiFi.begin(ssid, password);
while ( WiFi.status() != WL_CONNECTED ) {
delay(500);
Serial.print(".");
}
// Print our IP address
Serial.println("Connected!");
Serial.print("My IP address: ");
Serial.println(WiFi.localIP());
// Start WebSocket server and assign callback
webSocket.begin();
webSocket.onEvent(onWebSocketEvent);
}
void loop() {
// Look for and handle WebSocket data
webSocket.loop();
}
import sys
import websocket
# Connect to WebSocket server
ws = websocket.WebSocket()
ws.connect("ws://172.30.1.46")
print("Connected to WebSocket server")
# Ask the user for some input and transmit it
str = input("Say something: ")
ws.send(str)
# Wait for server to respond and print it
result = ws.recv()
print("Received: " + result)
# Gracefully close WebSocket connection
ws.close()
가끔 vscode에서 import가 잘 안될때 있는데 그럴땐
view 들어가셔서 select interpreter 인터프리터가 제대로 설정되어있는지 확인해보세요!!!
저는 파이썬이 3개 깔려서 안됐네요.
AP모드 사용하기
/*MIT License
Copyright (c) 2024 JD edu. http://jdedu.kr author: conner.jeong@gmail.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN TH
SOFTWARE.*/
#include <WiFi.h>
#include <WebServer.h>
#define M1_B 26
#define M1_A 27
#define FORWARD 1
#define BACKWARD 2
#define STOP 3
/* Put your SSID & Password */
const char* ssid = "lhj esp32"; // Enter SSID here
const char* password = "123456789"; //Enter Password here
/* Put IP Address details */
IPAddress local_ip(192,168,1,1);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
int motor_status = STOP;
WebServer server(80);
void go_forward(){
Serial.println("forward");
digitalWrite(M1_A, LOW);
digitalWrite(M1_B, HIGH);
}
void go_backward(){
Serial.println("backward");
digitalWrite(M1_A, HIGH);
digitalWrite(M1_B, LOW);
}
void stop(){
Serial.println("stop");
digitalWrite(M1_A, LOW);
digitalWrite(M1_B, LOW);
delay(200);
}
void setup() {
Serial.begin(115200);
pinMode(M1_A, OUTPUT);
pinMode(M1_B, OUTPUT);
stop();
WiFi.softAP(ssid, password);
WiFi.softAPConfig(local_ip, gateway, subnet);
delay(100);
server.on("/", handle_OnConnect);
server.on("/forward", handle_forward);
server.on("/backward", handle_backward);
server.on("/stop", handle_stop);
server.onNotFound(handle_NotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop() {
server.handleClient();
}
void handle_OnConnect() {
stop();
Serial.println("motor stop");
server.send(200, "text/html", SendHTML(motor_status));
}
void handle_forward() {
go_forward();
motor_status = FORWARD;
Serial.println("motor forward");
server.send(200, "text/html", SendHTML(motor_status));
}
void handle_backward() {
go_backward();
motor_status = BACKWARD;
Serial.println("motor backward");
server.send(200, "text/html", SendHTML(motor_status));
}
void handle_stop() {
stop();
motor_status = STOP;
Serial.println("motor stop");
server.send(200, "text/html", SendHTML(motor_status));
}
void handle_NotFound(){
server.send(404, "text/plain", "Not found");
}
String SendHTML(uint8_t motor_status){
String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>LED Control</title>\n";
ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
ptr +=".button {display: block;width: 80px;background-color: #3498db;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
ptr +=".button-on {background-color: #3498db;}\n";
ptr +=".button-on:active {background-color: #2980b9;}\n";
ptr +=".button-off {background-color: #34495e;}\n";
ptr +=".button-off:active {background-color: #2c3e50;}\n";
ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";
ptr +="<h1>ESP32 Web Server</h1>\n";
ptr +="<h3>Using Access Point(AP) Mode</h3>\n";
switch(motor_status){
case 1:
{ptr +="<p>Motor forward</p><a class=\"button button-on\" href=\"/forward\">ON</a>\n";}
{ptr +="<p>Motor backward</p><a class=\"button button-off\" href=\"/backward\">OFF</a>\n";}
{ptr +="<p>stop</p><a class=\"button button-off\" href=\"/stop\">OFF</a>\n";}
break;
case 2:
{ptr +="<p>Motor forward</p><a class=\"button button-off\" href=\"/forward\">OFF</a>\n";}
{ptr +="<p>Motor backward</p><a class=\"button button-on\" href=\"/backward\">ON</a>\n";}
{ptr +="<p>stop</p><a class=\"button button-off\" href=\"/stop\">OFF</a>\n";}
break;
case 3:
{ptr +="<p>Motor forward</p><a class=\"button button-off\" href=\"/forward\">OFF</a>\n";}
{ptr +="<p>Motor backward</p><a class=\"button button-off\" href=\"/backward\">OFF</a>\n";}
{ptr +="<p>stop</p><a class=\"button button-on\" href=\"/stop\">ON</a>\n";}
break;
}
ptr +="</body>\n";
ptr +="</html>\n";
return ptr;
}
'KG_KAIROS > MCU (Arduino & STM32)' 카테고리의 다른 글
🦾[KG_KAIROS] RobotArm 제작!! (0) | 2024.07.19 |
---|---|
🏎️ [KG_KAIROS] 라인트레이싱 도전기 & 바퀴 편차 제어 (0) | 2024.07.18 |
[KG_KAIROS] ESP32 모터제어(ThingSpeak) (0) | 2024.07.17 |
[KG_KAIROS] 아두이노 기초2 (0) | 2024.07.12 |
[KG_KAIROS] 전자회로 이론 및 아두이노 & STM32 (0) | 2024.07.12 |