2025年1月27日月曜日

Micro:bit and ble (キースタジオand回転サーボ)

以下が成功コード let input2...はinputにするとエラーとなる、理由不明

https://zenn.dev/ha864zenn/books/how-to-make-biped-robot/viewer/communicating-via-bluetooth :: micro:bit ble pedia

 https://monomonotech.jp/kurage/webbluetooth/microbit_ble_setting.html :: microbitV2 ble

https://qiita.com/nanbuwks/items/75ac24912d9bbe84d80f ble send

https://qiita.com/youtoy/items/46502b9bd17fad16d427 ble receive

https://monomonotech.jp/kurage/webbluetooth/microbit_ble_block_uart_rx.html ble receive

bluetooth.onBluetoothConnected(function () {

basic.showIcon(IconNames.Heart)
basic.pause(1000)
basic.clearScreen()
})
function backward () {
pins.analogWritePin(AnalogPin.P1, 600)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P12, 1)
pins.analogWritePin(AnalogPin.P2, 600)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(500)
}
bluetooth.onUartDataReceived(serial.delimiters(Delimiters.NewLine), function () {
input2 = bluetooth.uartReadUntil(serial.delimiters(Delimiters.NewLine))
if (input2.includes("f")) {
basic.showString(input2)
forward()
} else if (input2.includes("b")) {
basic.showString(input2)
backward()
}
})
function forward () {
pins.analogWritePin(AnalogPin.P1, 600)
pins.digitalWritePin(DigitalPin.P13, 1)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.analogWritePin(AnalogPin.P2, 600)
pins.digitalWritePin(DigitalPin.P15, 1)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(500)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(500)
}
let input2 = ""
bluetooth.startUartService()
pins.digitalWritePin(DigitalPin.P14, 1)
ーーーーーーーーーーーーーーーーーーーーーーーー
これを単独でうごかすには大容量バッテリ(3A出力2個口)が必要!
bluetooth.onBluetoothConnected(function () {
basic.showIcon(IconNames.Heart)
basic.pause(1000)
basic.clearScreen()
})
function backward () {
pins.servoWritePin(AnalogPin.P0, 103)
pins.servoWritePin(AnalogPin.P3, 58)
basic.pause(500)
pins.servoWritePin(AnalogPin.P0, 90)
pins.servoWritePin(AnalogPin.P3, 90)
}
bluetooth.onUartDataReceived(serial.delimiters(Delimiters.NewLine), function () {
input2 = bluetooth.uartReadUntil(serial.delimiters(Delimiters.NewLine))
if (input2.includes("f")) {
basic.showString(input2)
forward()
} else if (input2.includes("b")) {
basic.showString(input2)
backward()
}
})
function forward () {
pins.servoWritePin(AnalogPin.P0, 58)
pins.servoWritePin(AnalogPin.P3, 103)
basic.pause(500)
pins.servoWritePin(AnalogPin.P0, 90)
pins.servoWritePin(AnalogPin.P3, 90)
}
let input2 = ""
bluetooth.startUartService()
pins.servoWritePin(AnalogPin.P0, 90)
pins.servoWritePin(AnalogPin.P3, 90)


2025年1月26日日曜日

raspberry pi ヴィデオ関連 /Micro:bit keyestudioで無線操縦

 

-----------ラズパイ----------------------------------------

zero は2になっても2GしかWifi未対応 3a+は5Gも対応している

install時のusキーボード配列は、起動後にraspi-configでjpキーボードに変更できた

https://mail.google.com/mail/u/0/?tab=rm&ogbl#inbox 

gpiozero で 直感的にデバイスを制御する



https://ponkichi.blog/mjpg-streamer/ これも参考にして以下を

https://raspi-katsuyou.com/index.php/2020/06/30/11/10/44/644/
 これはブルーバックスと同じだが、ブルーバックスは
 全コマンドを/opt以下にmvしたので、10-02-stream.shを使用!

単純にヴィデオクリップするのならguvcviewがいい パイカメラの場合はv4l2が必要?
USBウェブカメラ(マイク付き)なら録音もできるからベターかも

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0303

https://mekou.com/linux-magazine/web%e3%82%ab%e3%83%a1%e3%83%a9%e6%92%ae%e5%bd%b1guvcview/
以上2個は同上

--------------キースタジオモータボードで無線操縦(サバクラ共通)--------------------------------

input.onButtonPressed(Button.A, function () {
radio.sendString("f")
})
input.onButtonPressed(Button.AB, function () {
radio.sendString("t")
})
input.onButtonPressed(Button.B, function () {
radio.sendString("b")
})

radio.setGroup(132)
pins.digitalWritePin(DigitalPin.P14, 1)
basic.showIcon(IconNames.Heart)

radio.onReceivedString(function (receivedString) {
basic.showString(receivedString)
if (receivedString == "f") {
basic.showLeds(`
. . # . .
. # # # .
# . # . #
. . # . .
. . # . .
`)
pins.analogWritePin(AnalogPin.P1, 1023)
pins.digitalWritePin(DigitalPin.P12, 1)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.analogWritePin(AnalogPin.P2, 1023)
pins.digitalWritePin(DigitalPin.P15, 1)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(500)
pins.analogWritePin(AnalogPin.P1, 1023)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.analogWritePin(AnalogPin.P2, 1023)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)
} else if (receivedString == "b") {
basic.showLeds(`
. . # . .
. . # . .
# . # . #
. # # # .
. . # . .
`)
pins.analogWritePin(AnalogPin.P1, 1023)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 1)
pins.analogWritePin(AnalogPin.P2, 1023)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 1)
basic.pause(500)
pins.analogWritePin(AnalogPin.P1, 1023)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.analogWritePin(AnalogPin.P2, 1023)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)
} else if (receivedString == "t") {
basic.showLeds(`
# # # # .
# . . # .
# . . # .
# . # # #
# . . # .
`)
pins.analogWritePin(AnalogPin.P1, 1023)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 1)
pins.analogWritePin(AnalogPin.P2, 1023)
pins.digitalWritePin(DigitalPin.P15, 1)
pins.digitalWritePin(DigitalPin.P16, 0)
basic.pause(500)
pins.analogWritePin(AnalogPin.P1, 1023)
pins.digitalWritePin(DigitalPin.P12, 0)
pins.digitalWritePin(DigitalPin.P13, 0)
pins.analogWritePin(AnalogPin.P2, 1023)
pins.digitalWritePin(DigitalPin.P15, 0)
pins.digitalWritePin(DigitalPin.P16, 0)
}
})


参考 キースタジオ詳細は以下に

https://wiki.keyestudio.com/Ks0308_keyestudio_Motor_Drive_Breakout_Board_for_micro_bit

このサイトのコードをjsですると


digitalWritePin(DigitalPin.P14, 1)

basic.forever(function () {

    pins.analogWritePin(AnalogPin.P1, 600)

    pins.digitalWritePin(DigitalPin.P13, 1)

    pins.digitalWritePin(DigitalPin.P12, 0)

    pins.analogWritePin(AnalogPin.P2, 600)

    pins.digitalWritePin(DigitalPin.P15, 1)

    pins.digitalWritePin(DigitalPin.P16, 0)

    basic.pause(500)

    pins.digitalWritePin(DigitalPin.P13, 0)

    pins.digitalWritePin(DigitalPin.P12, 0)

    pins.digitalWritePin(DigitalPin.P15, 0)

    pins.digitalWritePin(DigitalPin.P16, 0)

    basic.pause(500)

})

_keyestudio_Motor_Drive_Breakout_Board_for_micro_bit

2025年1月25日土曜日

obniz and ArduCamMini

 --

https://iot-gym.com/arducammini-obniz/ を基本とするがakizukiの取り扱い品が

mini-2m から mini-2m-plusになっていたので、以下のサイトを参照する

なお上サイトのようにvccを抜くのはいかんようだ。。。。

https://qiita.com/y-hira/items/0a1f4a69f1b1e858a916  のようにすべてつなぐ

それでもlow voltageとアラームでて画面がでない、単3x3をVCC、GNDに追加してでた

それでも画面は緑がかって。。。。

繰り返すが本サイトの修正が必須! 

ストリーム表示でも同様だ! 

<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<script src="https://unpkg.com/obniz@latest/obniz.js"></script>
</head>
<body>

<div id="obniz-debug"></div>
<img id="image">

<script>
var obniz = new Obniz("4998-4317"); //obnizIDを入力する
obniz.onconnect = async function () {
var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, gnd:4, vcc:5, sda:6, scl:7 });
await cam.startupWait();
const data = await cam.takeWait('320x240'); // これでも写真がでるのが結構遅い
 //'160x120'or'176x144'or'320x240'or'352x288'or'640x480'or'800x600'or'1024x768'or'1280x960'or'1600x1200'を指定する
data.unshift(255); // ここが重要!
console.log("image size = " + data.length + " bytes");
 // 以下の理解のためには https://edge.sincar.jp/web/base64-inline-image/ に詳しい書式説明あり
const base64 = cam.arrayToBase64(data);
document.getElementById("image").src = "data:image/jpeg;base64, " + base64;
}
</script>
</body>
</html>

<html>

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>

<script src="https://unpkg.com/obniz@latest/obniz.js"></script>

</head>

<body>

<div id="obniz-debug"></div>

<img id="image">

<script>

var obniz = new Obniz("5312-1232");  //obnizIDを入力する

obniz.onconnect = async function () {

  var cam = obniz.wired("ArduCAMMini", { cs:0, mosi:1, miso:2, sclk:3, gnd:4, vcc:5,sda:6, scl:7 });

  await cam.startupWait();

  while (true) { //これでストリームとなる

  const data = await cam.takeWait('160x120'); //'160x120'or'176x144'or'320x240'or'352x288'or'640x480'or'800x600'or'1024x768'or'1280x960'or'1600x1200'を指定する

   data.unshift(255); 

  console.log("image size = " + data.length + " bytes");

  const base64 = cam.arrayToBase64(data);

  document.getElementById("image").src = "data:image/jpeg;base64, " + base64;

 }

}

</script>

</body>

</html>

これでストリームもいけた

2025年1月24日金曜日

有用サイト一覧

 https://www.petitmonte.com/ プチモンテ uno&wroom

https://omoroya.com/ おもろ家 uno&kit-oscilo

https://sanuki-tech.net/  さぬきテックネット micro:bit 

https://hellobreak.net/ メタエレ実験室 picoとraspi

esp系はrandom nerd tutorialが一番(picoもある)

obnizは本社サイトが一番 

http://www.picfun.com/  後閑さん PICの神様

意外とないのがpicow.....以下に

https://sozorablog.com/raspberry-pi-pico-w-review/

2025年1月21日火曜日

Esp32-cam

 https://qiita.com/Nabeshin/items/b195cad1afe99ce29f1e :: 一番親切なサイト

ただしipがdhcpでadhocに割り当てられるのが難


2025年1月18日土曜日

Esp32-Radicon-Car-wtihout-camera


https://mukujii.sakura.ne.jp/esp2.html でgpio0が怪しげだったので17に変更

左右へふるには当該側だけがうごく

/* https://mukujii.sakura.ne.jp/esp2.html  WiFi-Control-Car(softAP) */

                

#include <WiFi.h>


const char ssid[] = "ESP32AP-WiFi";

const char pass[] = "esp32apwifi";

const IPAddress ip(192,168,30,3);

const IPAddress subnet(255,255,255,0);


const char html[] =

"<!DOCTYPE html><html lang='ja'><head><meta charset='UTF-8'>\

<style>input {margin:8px;width:80px;}\

div {font-size:16pt;color:red;text-align:center;width:400px;border:groove 40px orange;}</style>\

<title>WiFi_Car Controller</title></head>\

<body><div><p>Tank Controller</p>\

<form method='get'>\

<input type='submit' name='le' value='左' />\

<input type='submit' name='fo' value='前' />\

<input type='submit' name='ri' value='右' /><br>\

<input type='submit' name='st' value='停止' /><br>\

<input type='submit' name='bl' value='後左' />\

<input type='submit' name='ba' value='後ろ' />\

<input type='submit' name='br' value='後右' /><br><br>\

</form></div></body></html>";


void stop(){

    digitalWrite(17, LOW);

    digitalWrite(2, LOW);

    digitalWrite(4, LOW);

    digitalWrite(5, LOW);

}


WiFiServer server(80);


void setup()

{

    Serial.begin(115200);


    WiFi.softAP(ssid,pass);

    delay(100);

    WiFi.softAPConfig(ip,ip,subnet);


    IPAddress myIP = WiFi.softAPIP();


    pinMode(17, OUTPUT);

    pinMode(2, OUTPUT);

    pinMode(4, OUTPUT);

    pinMode(5, OUTPUT);

    delay(10);


    server.begin();


    Serial.print("SSID: ");

    Serial.println(ssid);

    Serial.print("AP IP address: ");

    Serial.println(myIP);

    Serial.println("Server start!");


}


void loop(){

    WiFiClient client = server.available();


    if (client) {

        String currentLine = "";

        Serial.println("New Client.");


        while (client.connected()) {

            if (client.available()) {

                char c = client.read();

                Serial.write(c);

                if (c == '\n') {

                    if (currentLine.length() == 0) {

                        client.println("HTTP/1.1 200 OK");

                        client.println("Content-type:text/html");

                        client.println();


                        client.print(html);

                        client.println();

                        break;

                    } else {

                        currentLine = "";

                    }

                } else if (c != '\r') {

                    currentLine += c;

                }


                if (currentLine.endsWith("GET /?fo")) {

                    stop();

                    digitalWrite(17, HIGH);

                    digitalWrite(4, HIGH);

                }

                if (currentLine.endsWith("GET /?le")) {

                    stop();

                    digitalWrite(17, HIGH);

                }

                if (currentLine.endsWith("GET /?ri")) {

                    stop();

                    digitalWrite(4, HIGH);

                }

                if (currentLine.endsWith("GET /?ba")) {

                    stop();

                    digitalWrite(2, HIGH);

                    digitalWrite(5, HIGH);

                }

                if (currentLine.endsWith("GET /?bl")) {

                    stop();

                    digitalWrite(2, HIGH);

                }

                if (currentLine.endsWith("GET /?br")) {

                    stop();

                    digitalWrite(5, HIGH);

                }

                if (currentLine.endsWith("GET /?st")) {

                    stop();

                }

            }

        }

        client.stop();

        Serial.println("Client Disconnected.");

    }

}

2025年1月16日木曜日

esp8266 servo-m/dcm-pwm/soft-ap radicon/static ip radicon

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();
}

2025年1月9日木曜日

DRV8833 大全 ・ 回転サーボ 

https://tamanegi.digick.jp/computer-embedded/mcuboa/lolin-d1-mini/ に

LOLIN(WEMOS) D1 mini lite の説明があるが、PWMがうまくいかん!

https://burariweb.info/electronic-work/wemos-d1-mini-esp8266-development-board.html#WeMos_D1_mini が手持ちのようだ GPIO16はPWMできんとあった

( pin0とピンをいろいろ組み合わせるが他につないだらできるが順逆とならん。。。。

gpio0以外の組み合わせでは音がするのみ。。むしろESP01でPWMできるのが不思議。。。)

単純なオンオフもgpio0以外をつかわんと順逆とならん 手持ちのWemosが

はずれだった可能性が高い

https://misoji-engineer.com/archives/motordriver-dc.html にくわしいが

MICROPYTHONで解説されている


スタンバイに3.3vを入力するのがポイント 5vでは暴走する!

以下はesp01での話!Wemosではない!

https://tamanegi-digick.com/it/dcmtdrv/#toc30 がARDUINO-IDE

以下のようにanalogWriteは徐々にあげていかんと暴走する? 

そうでもなかった つねにLOWにするサイドはanalogWriteでもdigitalWriteでいい

結局 https://deviceplus.jp/arduino/arduino_f05/ がわかりやすい

ちなみにgpioは0,2と1,3の組み合わせがいい

#define VIN1 0
#define VIN2 2
void setup() 
{
  pinMode(VIN1, OUTPUT);
  pinMode(VIN2, OUTPUT);
}

void loop()
{
  int i = 0;

  //正回転
  digitalWrite(VIN2, LOW);
  //回転速度を上げる
  for(i = 0; i < 256; i ++)
  {
    analogWrite(VIN1, i);
    delay(10);
  }
  //回転速度を下げる
  for(i = 0; i < 256; i ++)
  {
    analogWrite(VIN1, 0xff - i);
    delay(10);
  }
  //逆回転
  digitalWrite(VIN1, LOW);

  //回転速度を上げる
  for(i = 0; i < 256; i ++)
  {
    analogWrite(VIN2, i);
    delay(10);
  }
  //回転速度を下げる
  for(i = 0; i < 256; i ++)
  {
    analogWrite(VIN2, 0xff - i);
    delay(10);
  }
}
--------別のやりかた-------------------------------------------------------------

#define MOTOR_AIN1 0
#define MOTOR_AIN2 2

void setup() {
  pinMode(MOTOR_AIN1, OUTPUT);
  pinMode(MOTOR_AIN2, OUTPUT);
}

void loop() {
  digitalWrite(MOTOR_AIN1, LOW);
  analogWrite(MOTOR_AIN2,0);
  delay(1000);
  digitalWrite(MOTOR_AIN1, LOW);
  digitalWrite(MOTOR_AIN2, LOW);            
  delay(1000);
  analogWrite(MOTOR_AIN1, 0);
  digitalWrite(MOTOR_AIN2, LOW);
  delay(1000);
  digitalWrite(MOTOR_AIN1, HIGH);
  digitalWrite(MOTOR_AIN2, HIGH);
  delay(1000);
}



}ーーーーーーー回転サーボーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

0~90 前 91停止 91~180  後

https://qiita.com/Google_Homer/items/b1508d94220e669c2c08

obnized M5StickC 回転Servoで2WD Car



https://kokensha.xyz/obniz/obniz-continuous-servo-test/

obnizで連続回転サーボを動かしてみる!

サーボごとにスペックが違うようで、電源は外部からとるのが無難のようだ