Wemos D1R1で5Vリレーを制御

Aug 25 2020

Webサーバーを介してWemosD1R1モジュールで5Vリレーを制御したいと思います。私は次のモジュールを使用しています:

  • 5vdcリレーのトングリング
  • ウェモスD1R1

私は次の回路図を使用しています:

これが私が使用しているコードです:

#include <ESP8266WiFi.h>

const char* ssid = "Myssidname";
const char* password = "Myssidpass";

int ledPin = D3;
WiFiServer server(80);

void setup() {
 Serial.begin(9600);
 delay(10);


 pinMode(ledPin, OUTPUT);
 digitalWrite(ledPin, LOW);

 // Connect to WiFi network
 Serial.println();
 Serial.println();
 Serial.print("Connecting to ");
 Serial.println(ssid);

 WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }
 Serial.println("");
 Serial.println("WiFi connected");

 // Start the server
 server.begin();
 Serial.println("Server started");

 // Print the IP address
 Serial.print("Use this URL : ");
 Serial.print("http://");
 Serial.print(WiFi.localIP());
 Serial.println("/");

}

void loop() {
 // Check if a client has connected
 WiFiClient client = server.available();
 if (!client) {
   return;
 }

 // Wait until the client sends some data
 Serial.println("new client");
 while(!client.available()){
   delay(1);
 }

 // Read the first line of the request
 String request = client.readStringUntil('\r');
 Serial.println(request);
 client.flush();

 // Match the request

 int value = LOW;
 if (request.indexOf("/LED=ON") != -1) {
   digitalWrite(ledPin, HIGH);
   value = HIGH;
 }
 if (request.indexOf("/LED=OFF") != -1){
   digitalWrite(ledPin, LOW);
   value = LOW;
 }



 // Return the response
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println(""); //  do not forget this one
 client.println("<!DOCTYPE HTML>");
 client.println("<html>");

 client.print("Led pin is now: ");

 if(value == HIGH) {
   client.print("On");  
 } else {
   client.print("Off");
 }
 client.println("<br><br>");
 client.println("Click <a href=\"/LED=ON\">here</a> Turn relay ON<br>");
 client.println("Click <a href=\"/LED=OFF\">here</a> Turn relay OFF<br>");
 client.println("</html>");

 delay(1);
 Serial.println("Client disconnected");
 Serial.println("");

}

コードを正常にアップロードしてモニターを監視した後、ライトがオンになり、次のメッセージが表示されます。

16:02:20.400 -> WiFi connected
16:02:20.425 -> Server started
16:02:20.479 -> Use this URL : http://192.168.100.7/
16:02:41.680 -> new client
16:02:41.680 -> GET / HTTP/1.1
16:02:41.680 -> Client disconnected

ただし、ブラウザを使用してリレーをオンまたはオフにしても、何も起こりません。

19:38:56.010 -> new client
19:38:56.010 -> GET /LED=ON HTTP/1.1
19:38:56.010 -> Client disconnected
19:38:57.016 -> new client
19:38:57.016 -> GET /LED=OFF HTTP/1.1
19:38:57.063 -> Client disconnected

ただし、ライトには何も起こらず、リレーはクリックしません。

さらにいくつかの注意事項:

  • リレーを高くしてコードをアップロードして回路を切断しようとしましたが、ライトはまだ点灯しています
  • Wemosネットワーク名がネットワークリストに表示されます
  • ATコマンドに応答しません

回答

1 motionchannel Aug 25 2020 at 20:37

問題は、5Vリレーには不十分な3.3Vしか出力しないWemosモジュールにあるため、以下の回路図に従って2N2222トランジスタを実装することでこれを解決できます。

DuncanC Aug 25 2020 at 00:21

Wemos D1 R1は5Vボードですか、それとも3.3Vですか?3.3Vボードの場合、それが問題です。3.3Vリレーを入手してください。

(少し掘り下げてみると、Wemosは3.3Vデバイスのようです。そうであれば、それが問題です。これらの「デジタルリレー」は5Vモデルと3.3Vモデルで利用できます。5Vリレーを3.3Vリレーに交換してください。)

リレーの現在の要件は何ですか?また、Wemosから引き出すことができる最大電流はどれくらいですか?どのようにWemosに電力を供給していますか?

これを細かく分割して、別々に解決すると思います。マルチメータ(または電流制限抵抗付きのLED)をピンD3に配置し、ピンがオン/オフになっていることを確認します。もしそうなら、それはあなたのリレーに問題があります。そうでない場合は、スケッチまたはArduinoに問題があります。

ピンがオン/オフしている場合は、リレーのINピンを直接+ 5Vに接続してみてください。それではあなたの電球は点灯しますか?