22.02.24 wemosサーボモータ、シリアルディスプレイI/O、Bluetooth
9898 ワード
サーボモータ実習
WemosサーボESP 32サーボ採用
-スケッチを自動完了可能-ライブラリを含む-zipライブラリ-ESP 32サーボを追加
※UNOは#include<サーボです.h>
可変抵抗でサーボモータの角度を制御する
可変抵抗はセンサ(外部状態提示)なのでINPUT
センサからシリアルモニタに値を出力する必要があります=>読み取りが正しい場合は0~4095ビット
writeの角度は0から179度-->範囲変換map関数
シリアルモニタで出力されるタイプ
オフラインending:123
新しい行:123n-オープン
CR:123r-タッチパネルカーソルを一番前に移動
Both NL&CR : 123\n\r Serial.available()
データ受信時に使用する関数
データがアドゥイノに入ると、データはシーケンスバッファに格納される
-シーケンスバッファ(キュー構造-FIFO):複数のデータに移動し、個数を返します.
Serial.readでデータを読み出して受信する
リファレンス構造:スタック構造->FILO/Queue構造->FIFO
Serial.read()で取得した値をchar、Stringなどとして保存->読み出した値はシーケンスバッファから消去されます
charは、出力ボックスの の文字列です.
ランダムデジタル出力関数:random()
random(num) ; : 0~num-1ランダム数値生成
random(min,max); : 最小値を含め、最大値を含まない範囲の乱数を生成 Bluetooth通信用のライブラリを指定:Bluetooth-Bluetoothシリアル を含む
新しいウィンドウを貼り付けるアプリケーションの実行-Bluetoothコントローラダウンロード ESP<= をクリック Terminal Mode 行末尾なし->新規行 アドゥイ路間データ通信
-マザーボードとスレーブボードを指定し、データ通信を実現
-マザーボードの例-Bluetoothシリアル-シリアルBTM
=>String name=「デバイス名」およびSerialbt.begin(「デバイス名」,true)セクションを同じに書く
-マザーボードの例BluetoothSerial-SeerialBT>>slaveから、既存のBluetoothの例のように、取得するデバイス名を読み込んで貼り付け、masterと完全に一致させる=>SerialBT.begin(「デバイス名」) Wifi通信でネットワークに接続
このクリップに任意のhtmlドキュメントを作成し、localhostセクションを私のIPv 4アドレスに置き換えますアドゥイノは要求されたクライアントであり、サーブレットはクライアントの要求を受信して応答を送信するサーバであり、 .
http.begin("http://192.168.137.1:8090/IoT/Exam00?data=1234" );
クエリーを使用してサーバにデータ値1234->data?=を送信1234
サーブレットサンプルファイルを次のように設定します.
WemosサーボESP 32サーボ採用
-スケッチを自動完了可能-ライブラリを含む-zipライブラリ-ESP 32サーボを追加
※UNOは#include<サーボです.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);
}
シリアルモニタI/Oシリアルモニタで出力されるタイプ
オフラインending:123
新しい行:123n-オープン
CR:123r-タッチパネルカーソルを一番前に移動
Both NL&CR : 123\n\r
データ受信時に使用する関数
データがアドゥイノに入ると、データはシーケンスバッファに格納される
-シーケンスバッファ(キュー構造-FIFO):複数のデータに移動し、個数を返します.
Serial.readでデータを読み出して受信する
リファレンス構造:スタック構造->FILO/Queue構造->FIFO
Serial.read()で取得した値をchar、Stringなどとして保存->読み出した値はシーケンスバッファから消去されます
charは、出力ボックスの
// 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); : 最小値を含め、最大値を含まない範囲の乱数を生成
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("=");
}
推測が高ければ高いほど、間違いが低いゲームを作成し、0入力でゲームが終了します(cnt変数を追加)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("=");
}
Bluetoothコントロールアドゥーイノ(アンドロイド)を使用新しいウィンドウを貼り付ける
#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なので、この部分はすぐに過ぎてしまいます.-マザーボードとスレーブボードを指定し、データ通信を実現
-マザーボードの例-Bluetoothシリアル-シリアルBTM
=>String name=「デバイス名」およびSerialbt.begin(「デバイス名」,true)セクションを同じに書く
-マザーボードの例BluetoothSerial-SeerialBT>>slaveから、既存のBluetoothの例のように、取得するデバイス名を読み込んで貼り付け、masterと完全に一致させる=>SerialBT.begin(「デバイス名」)
このクリップに任意のhtmlドキュメントを作成し、localhostセクションを私のIPv 4アドレスに置き換えます
#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がオートミールディスプレイに接続されていれば、Wifi接続でOK!200エラーウィンドウが表示されたらhtmlに接続http.begin("http://192.168.137.1:8090/IoT/Exam00?data=1234" );
クエリーを使用してサーバにデータ値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"); //아두이노 시리얼모니터에 출력됨
}
}
Reference
この問題について(22.02.24 wemosサーボモータ、シリアルディスプレイI/O、Bluetooth), 我々は、より多くの情報をここで見つけました https://velog.io/@ggg4155/22.02.24テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol