https://techatronic.com/esp8266-with-servo-motor-control-servo-motor-with-esp8266/
サーボモーターSG90が半分の角度しか回らないので調査
https://www.rocher.kyoto.jp/arbr/?p=1763 に対処方あり
dc-dc stepdown convertorで3.3vをとりだすとesp01がつかえる
servoは上記をとおさず5vをとりだし、制御は3vロジックでいけた
最終コードは
#include <Servo.h> // servo library
Servo s1;
void setup()
{
s1.attach(0,500,2400); // servo attach gpio0 pin of esp01
}
void loop()
{
s1.write(0);
delay(1000);
s1.write(90);
delay(1000);
s1.write(180);
delay(1000);
}
------------------------------------------------------------------------------------------------
https://makers-with-myson.blog.ss-blog.jp/2017-01-14 を参考に
PWMのFREQ/DUTYをセットして成功した DUTYは1000くらいまで設定しないと
モータがうごかんかった PINMODE設定不要だったこと(行儀わるし、書くべし)
https://www.ei.tohoku.ac.jp/xkozima/lab/espTutorial0.html にFREQ目安あり
PWM 周波数が高いほど、使用可能なデューティ分解能は低くなり、その逆も同様です。
https://micropython-docs-ja.readthedocs.io/ja/v1.19.1ja/library/machine.PWM.html より
const in ledPin = 2;
void setup(){
pinMode(ledPin,OUTPUT);
analogWriteFreq(1000);
analogWriteRange(1000);
}
void loop(){
digitalWrite(4,LOW); // drv8833用、stby3.3vわすれずに
for(int dutyCycle=0;dutyCycle<1000;dutyCycle++){
analogWrite(ledPin,dutyCycle);
delay(10);
}
for(int dutyCycle=0;dutyCycle<1000;dutyCycle++){
analogWrite(ledPin,dutyCycle);
delay(10);
}
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
// https://cotechworks.ltt.jp/2023/06/05/post-668/ を改変
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define WIFI_SSID "ESP8266-softAP" /* SSID */
#define WIFI_PWD "12345678" /* パスワード */
#define AIN0 2
#define AIN1 4
ESP8266WebServer server(80);
IPAddress ip( 192, 168, 0, 1 ); /* ESP8266のIPアドレス */
IPAddress subnet( 255, 255, 255, 0 ); /* サブネットマスク */
void setup() {
pinMode(AIN0,OUTPUT);
pinMode(AIN1,OUTPUT);
/* softAPモードに設定 */
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(ip, ip, subnet);
WiFi.softAP(WIFI_SSID, WIFI_PWD);
server.on("/", []() {
server.send(
200,
"text/html",
"<h1>Hello! Web Server!</h1>"
"Click <a href=\"/F\">forward</a>"
"</br>"
"Click <a href=\"/B\">backward</a>");
});
server.on("/F", []() {
digitalWrite(AIN0,HIGH);
digitalWrite(AIN1,LOW);
delay(100);
digitalWrite(AIN0,HIGH);
digitalWrite(AIN1,HIGH);
server.send(
200,
"text/html",
"<h1>Hello! Web Server!</h1>"
"Click <a href=\"/F\">forward</a>"
"</br>"
"Click <a href=\"/B\">backward</a>");
});
server.on("/B", []() {
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,HIGH);
delay(100);
digitalWrite(AIN0,HIGH);
digitalWrite(AIN1,HIGH);
server.send(
200,
"text/html",
"<h1>Hello! Web Server!</h1>"
"Click <a href=\"/F\">forward</a>"
"</br>"
"Click <a href=\"/B\">backward</a>");
});
server.begin();
}
void loop() {
/* クライアントからアクセスがあった時の処理 */
server.handleClient();
}
-------------------------------------------------------
#include <WiFiClient.h>
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define LED 13 //LED点灯に使用するピン
ESP8266WebServer server(80);
#define AIN0 4
#define AIN1 2
#define BIN0 12
#define BIN1 14
void onroot() {
String msg ;
msg += "<!DOCTYPE html><html><head><meta charset=\"utf-8\"><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\"><title>LED Button</title></head><body>";
msg += "<script>";
msg += "function sendOn(){" ;
msg += "send(\"/on/\");";
msg += "document.getElementById(\"LEDstatus\").innerHTML=\"ON!\";";
msg += "}";
msg += "function sendOff(){";
msg += "send(\"/off/\");";
msg += "document.getElementById(\"LEDstatus\").innerHTML=\"OFF!\";";
msg += "}";
msg += "function sendOnL(){" ;
msg += "send(\"/onL/\");";
msg += "document.getElementById(\"LEDstatus\").innerHTML=\"ON!\";";
msg += "}";
msg += "function sendOffR(){";
msg += "send(\"/offR/\");";
msg += "document.getElementById(\"LEDstatus\").innerHTML=\"OFF!\";";
msg += "}";
msg += "function send(url){";
msg += "var xhr = new XMLHttpRequest();";
msg += "xhr.open(\"GET\", url, true);";
msg += "xhr.send();";
msg += "}";
msg += "</script>";
msg += "<button id=\"on\" onClick=sendOn()>LED ON</button>";
msg += "<button id=\"off\" onClick=sendOff()>LED OFF</button>";
msg += "<button id=\"onL\" onClick=sendOnL()>LED ON L</button>";
msg += "<button id=\"offR\" onClick=sendOffR()>LED OFF R</button>";
msg += "<p id=\"LEDstatus\"></p>";
msg += "</body></html>";
server.send(200, "text/html", msg);
}
void LedOn(){
Serial.println("ON");
digitalWrite(LED,HIGH);
digitalWrite(AIN0,HIGH);
digitalWrite(AIN1,LOW);
digitalWrite(BIN0,HIGH);
digitalWrite(BIN1,LOW);
delay(500);
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,LOW);
digitalWrite(BIN0,LOW);
digitalWrite(BIN1,LOW);
server.send(200, "text/html","OK");
}
void LedOff(){
Serial.println("OFF");
digitalWrite(LED,LOW);
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,HIGH);
digitalWrite(BIN0,LOW);
digitalWrite(BIN1,HIGH);
delay(500);
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,LOW);
digitalWrite(BIN0,LOW);
digitalWrite(BIN1,LOW);
server.send(200, "text/html","OK");
}
void LedOnL(){
Serial.println("ON");
digitalWrite(LED,HIGH);
digitalWrite(AIN0,HIGH);
digitalWrite(AIN1,LOW);
digitalWrite(BIN0,LOW);
digitalWrite(BIN1,HIGH);
delay(500);
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,LOW);
digitalWrite(BIN0,LOW);
digitalWrite(BIN1,LOW);
server.send(200, "text/html","OK");
}
void LedOffR(){
Serial.println("OFF");
digitalWrite(LED,LOW);
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,HIGH);
digitalWrite(BIN0,HIGH);
digitalWrite(BIN1,LOW);
delay(500);
digitalWrite(AIN0,LOW);
digitalWrite(AIN1,LOW);
digitalWrite(BIN0,LOW);
digitalWrite(BIN1,LOW);
server.send(200, "text/html","OK");
}
void setup() {
pinMode(LED, OUTPUT);
pinMode(AIN0, OUTPUT);
pinMode(AIN1, OUTPUT);
pinMode(BIN0, OUTPUT);
pinMode(BIN1, OUTPUT);
digitalWrite(AIN0, LOW);
digitalWrite(AIN0, LOW);
digitalWrite(BIN0, LOW);
digitalWrite(BIN0, LOW);
Serial.begin(115200);
Serial.println("");
Serial.println("ESP8266 Wifi test");
// WiFi.config(IPAddress(192, 168, 43, 160), WiFi.gatewayIP(), WiFi.subnetMask());
WiFi.config(IPAddress(192,168,43,160),IPAddress(192,168,43,1),IPAddress(255,255,255,0));
WiFi.begin("HUAWEI@nova@lite@3+","99991111");
WiFi.mode(WIFI_STA);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected as ");
Serial.println(WiFi.localIP());
Serial.println(WiFi.gatewayIP());
Serial.println(WiFi.subnetMask());
// Web server setting
server.on("/", onroot);
server.on("/on/", LedOn);
server.on("/off/", LedOff);
server.on("/onL/", LedOnL);
server.on("/offR/", LedOffR);
server.begin();
}
void loop() {
server.handleClient();
}