wemos servo는 ESP32_Servo를 사용함
-자동완성할수있음 스케치-라이브러리포함하기-zip라이브러리추가-ESP32_Servo
※UNO는 #include<Servo.h>
가변저항으로 서보모터 각도 제어하기
가변저항은 센서(외부 상태 알려줌)이므로 INPUT
센서로부터값을 시리얼모니터에 출력해야됨 =>잘읽힌다면 0~4095비트
write의 각도는 0~179도 --->범위변환 map함수 사용
#include <ESP32_Servo.h>//서보모터 라이브러리 불러와 사용
Servo myServo; // Scanner sc
int servoPin = 17;
int potPin = 34;
void setup() {
myServo.attach(servoPin); //서보모터의 핀모드
Serial.begin(115200);
}
void loop() {
int sensorValue = analogRead(potPin);
Serial.println(sensorValue);
int mapValue = map(sensorValue,0,4095,0,179);
돌아가는 방향 바꾸려면 가변저항의 + - 를 바꾸거나,
0, 4095 위치를 바꾸거나 0,179의 위치를 바꾸면 +- 가 바뀐다
myServo.write(mapValue);
}
시리얼모니터에 출력되는 종류
line ending 없음 : 123
새줄 : 123\n - 개행됨
CR : 123\r - 엔터치면 커서가 맨앞으로감
Both NL&CR : 123\n\r
// 1,2,3 입력시 led 제어
int ledPin1=18;
int ledPin2=19;
int ledPin3=23;
void setup() {
Serial.begin(115200);
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
}
void loop() {
if(Serial.available()){ //시리얼통신이 온다면
//시리얼 버퍼(큐구조-FIFO) 탐색해서 자료가 몇개인지 검색 , 개수가 리턴됨
//자료구조 참고 : stack구조-> FILO / Queue구조->FIFO
//C++에서는 if문에 정수가능- 0은F, 1이상 T
char c = Serial.read();
//시리얼버퍼의 맨먼저 값을 하나 꺼내서 사라지고 값이 char에 저장됨
Serial.println(c);
//큰if문 안 if ↓↓↓
if(c=='1'){ //char형태라 문자열로 인식됨
digitalWrite(ledPin1, HIGH);
} else if(c=='2'){
digitalWrite(ledPin2, HIGH);
} else if(c=='3'){
digitalWrite(ledPin3, HIGH);
} else if(c=='0'){
digitalWrite(ledPin1, 0);
digitalWrite(ledPin2, 0);
digitalWrite(ledPin3, 0);
}
}
}
랜덤 숫자 출력하는 함수 : random();
random(num) ; : 0 ~ num-1 랜덤숫자 생성
random(min,max); : min값 포함, max값 포함안되는 범위의 랜덤숫자 생성
int num1=0; //루프문안에서 랜덤값 출력을 위한 전역변수
int num2=0;
void setup() {
Serial.begin(115200);
Serial.println("====Game Start====");
sendQuiz(); //랜덤값 추출하고 정수 추출하는 메서드로 만들어줌 .. 아래서 확인,,
}
void loop() {
//입력 받고 정답이라면 "정답입니다" 오답이라면"오답입니다" 출력
if(Serial.available()){ //계속해서 버퍼탐색
int input = Serial.parseInt(); //정수형으로 형변환이 필요한 이유: 아두이노자체에서 아스키코드로 변환해버리기 때문
Serial.println(input);
if(num1+num2 == input){
Serial.println("정답입니다");
}else {
Serial.println("오답입니다");
}
sendQuiz();
}
}
void sendQuiz() {
num1 = random(9) + 1; //1~9 랜덤숫자 생성
num2 = random(1,10); //min값 포함, max값 포함안됨
Serial.print(num1);
Serial.print("+");
Serial.print(num2);
Serial.print("=");
}
int num1 = 0;
int num2 = 0;
int cnt = 0; //정답횟수 저장하는 변수
boolean check = true; //0입력을 위한 변수 선언
void setup() {
Serial.begin(115200);
Serial.println("====Game Start====");
sendQuiz();
}
void loop() {
//입력 받고 정답이라면 "정답입니다" 오답이라면"오답입니다" 출력
//0입력시 종료
//정답을 맞출수록 문제난이도 상승->두자리수-세자리수-...n자리수덧셈으로
if(Serial.available()){ //계속해서 버퍼탐색
int input = Serial.parseInt();
Serial.println(input);
if(input == 0){
check = false; //false지정하면 바로아래if문 거치지않음
Serial.println("종료되었습니다.");
}
if(check){
if(num1+num2 == input){
Serial.println("정답입니다");
cnt++;
}else {
Serial.println("오답입니다");
if(cnt>0){
cnt--; //cnt가 0이었다면 음수가 되니까 조건을 0이상으로 줌
}
}
sendQuiz();
} //------- if(check) 끝나는 부분
}
}
void sendQuiz() {
num1 = random(pow(10,cnt), pow(10, cnt+1));
num2 = random(pow(10,cnt), pow(10, cnt+1));
//min:10^cnt, max:10^cnt+1
//pow(수,지수)=>거듭제곱 값이 나옴
Serial.print(num1);
Serial.print("+");
Serial.print(num2);
Serial.print("=");
}
에서 새로 나온 창 복붙해오기
#include "BluetoothSerial.h"
#if !defined(CONFIG_BT_ENABLED) || !defined(CONFIG_BLUEDROID_ENABLED)
#error Bluetooth is not enabled! Please run `make menuconfig` to and enable it
#endif
BluetoothSerial SerialBT;
void setup() {
Serial.begin(115200);
SerialBT.begin("ESP32gogo"); //블루투스검색시 모듈이름 Bluetooth device name
Serial.println("The device started, now you can pair it with bluetooth!");
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
폰기종 운영체제가 IOS라 이부분은 빠르게 넘어갔다..
이클립스에서 임의의 html문서만들기 -> 실행해서 localhost부분을 나의 IPv4주소로 바꿔준다
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "???"; //wifi id
const char* password = "???"; //wifi pw
String result = "";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
http.begin("http://192.168.137.1:8090/IoT/index.html");
int httpCode = http.GET(); //Make the request
if (httpCode > 0) { //Check for the returning code
Serial.println(httpCode);
result = http.getString();
Serial.println(result);
}
else {
Serial.println("Error on HTTP request");
}
http.end(); //Free the resources
}
delay(1000);
}
시리얼모니터에 wifi connected가 뜨면 와이파이 연결이 된 것! 200 에러 창이 뜨면 연결 html과 연결된 것
http.begin("http://192.168.137.1:8090/IoT/Exam00?data=1234");
쿼리스트링방식 사용해서 서블릿으로 data의 값 1234를 보냄 -> data?=1234
서블릿 예제파일을 아래처럼 만들어줌
#include <WiFi.h>
#include <HTTPClient.h>
const char* ssid = "아이디";
const char* password = "비번";
String result = "";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to the WiFi network");
}
void loop() {
if ((WiFi.status() == WL_CONNECTED)) { //Check the current connection status
HTTPClient http;
http.begin("http://192.168.137.1:8090/IoT/Exam00?data=1234");
//쿼리스트링방식 사용해서 만들어놓은 서블릿으로 data의 값 1234를 보냄 -> data?=1234
int httpCode = http.GET(); //Make the request
if (httpCode > 0) { //Check for the returning code
Serial.println(httpCode);
result = http.getString();
Serial.println(result);
}
else {
Serial.println("Error on HTTP request");
}
http.end(); //Free the resources
}
delay(1000);
}
package test;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/Exam00")
public class Exam00 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
//아두이노로 보내줄 출력스트림 out객체 생성
String data = request.getParameter("data"); //아두이노로부터 쿼리스트링으로 받아온 data
System.out.println(data);
//콘솔창에 데이터 출력
out.print("안녕하세요 / Hello World"); //아두이노 시리얼모니터에 출력됨
}
}