소스 검색

Initial commit: Minolta remote control project with ESP8266

faqmoroz 1 주 전
커밋
83ff742d20
3개의 변경된 파일261개의 추가작업 그리고 0개의 파일을 삭제
  1. 26 0
      .gitignore
  2. 37 0
      .vscode/c_cpp_properties.json
  3. 198 0
      minolta_remote_v1.ino

+ 26 - 0
.gitignore

@@ -0,0 +1,26 @@
+# Arduino IDE
+*.o
+*.a
+*.so
+.*.swp
+*~
+*#.swp
+._*
+.DS_Store
+Thumbs.db
+
+# Build directories
+build/
+dist/
+
+# VS Code
+.vscode/settings.json
+.vscode/launch.json
+
+# Object files
+*.exe
+*.out
+*.elf
+
+# Dependencies
+node_modules/

+ 37 - 0
.vscode/c_cpp_properties.json

@@ -0,0 +1,37 @@
+{
+    "configurations": [
+        {
+            "name": "Arduino",
+            "compilerPath": "",
+            "cStandard": "c11",
+            "cppStandard": "c++11",
+            "intelliSenseMode": "gcc-x86",
+            "includePath": [
+                "${workspaceFolder}",
+               // "${workspaceFolder}/libraries",
+                "C:/Users/faqmoroz/Documents/Arduino/libraries/**",
+                "C:/Users/faqmoroz/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/*/cores/esp8266",
+                "C:/Users/faqmoroz/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/*/libraries/**",
+                "C:/Users/faqmoroz/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/*/variants/d1_mini"
+            ],
+            "defines": [
+                "__ets__",
+                "_IEEE_ADDR_DEFINED",
+                "ARDUINO=10812",
+                "ARDUINO_ESP8266_NODEMCU_ESP12E",
+                "ARDUINO_ARCH_ESP8266",
+                "F_CPU=80000000L"
+            ],
+            "browse": {
+                "path": [
+                    "${workspaceFolder}",
+                    "C:/Users/faqmoroz/Documents/Arduino/libraries/**",
+                    "C:/Users/faqmoroz/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/*/cores/esp8266",
+                    "C:/Users/faqmoroz/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/*/libraries/**"
+                ],
+                "limitSymbolsToIncludedHeaders": false
+            }
+        }
+    ],
+    "version": 4
+}

+ 198 - 0
minolta_remote_v1.ino

@@ -0,0 +1,198 @@
+#include <ArduinoJson.h>
+
+#include <AsyncEventSource.h>
+#include <AsyncJson.h>
+#include <AsyncWebSocket.h>
+#include <AsyncWebSynchronization.h>
+#include <ESPAsyncWebServer.h>
+#include <StringArray.h>
+#include <WebAuthentication.h>
+#include <WebHandlerImpl.h>
+#include <WebResponseImpl.h>
+
+#include <AsyncEventSource.h>
+#include <AsyncJson.h>
+#include <AsyncWebSocket.h>
+#include <AsyncWebSynchronization.h>
+#include <ESPAsyncWebServer.h>
+#include <StringArray.h>
+#include <WebAuthentication.h>
+#include <WebHandlerImpl.h>
+#include <WebResponseImpl.h>
+
+#include <ArduinoWiFiServer.h>
+#include <BearSSLHelpers.h>
+#include <CertStoreBearSSL.h>
+#include <ESP8266WiFi.h>
+#include <ESP8266WiFiAP.h>
+#include <ESP8266WiFiGeneric.h>
+#include <ESP8266WiFiGratuitous.h>
+#include <ESP8266WiFiMulti.h>
+#include <ESP8266WiFiScan.h>
+#include <ESP8266WiFiSTA.h>
+#include <ESP8266WiFiType.h>
+#include <WiFiClient.h>
+#include <WiFiClientSecure.h>
+#include <WiFiClientSecureBearSSL.h>
+#include <WiFiServer.h>
+#include <WiFiServerSecure.h>
+#include <WiFiServerSecureBearSSL.h>
+#include <WiFiUdp.h>
+
+static const uint8_t D1   = 5;
+static const uint8_t D2   = 4;
+static const char* ssid = "MINOLTA_REMOTE_CONTROL";
+static const char* password = "12345678";
+bool isFocusPressed = false;
+IPAddress local_IP(192,168,1,200);
+IPAddress gateway(192,168,1,1);
+IPAddress subnet(255,255,255,0);
+AsyncWebServer server(80);
+
+void setup() {
+  // put your setup code here, to run once:
+  Serial.begin(115200);
+  pinMode(LED_BUILTIN, OUTPUT);  // Initialize the LED_BUILTIN pin as an output
+  pinMode(D1, OUTPUT);
+  pinMode(D2, OUTPUT);
+  digitalWrite(LED_BUILTIN, LOW); 
+  digitalWrite(D1, LOW);
+  digitalWrite(D2, LOW);
+  if (!WiFi.softAPConfig (local_IP, gateway, subnet))
+  {   
+    Serial.println("Failed to config IP");
+  }
+  WiFi.softAP(ssid, password);
+  Serial.println(WiFi.softAPIP());
+  Serial.println("Waiting for connect");
+  /*while(WiFi.status() != WL_CONNECTED)
+  {
+    digitalWrite(LED_BUILTIN, HIGH); 
+    delay(500);
+    Serial.print(".");  
+    Serial.print(WiFi.status());
+    digitalWrite(LED_BUILTIN, LOW); 
+  }*/
+   Serial.println("Client connected");
+
+   server.on("/api/focus",HTTP_GET, [](AsyncWebServerRequest *request)
+   {
+    Serial.println("api/focus");
+    digitalWrite(LED_BUILTIN, HIGH); 
+    halfPress();
+    digitalWrite(LED_BUILTIN, LOW); 
+    request->send(200,"application/json","{\"result\":\"true\"}");
+   });
+
+   server.on("/api/takePhoto",HTTP_GET, [](AsyncWebServerRequest *request)
+   {
+    Serial.println("api/takePhoto");
+    digitalWrite(LED_BUILTIN, HIGH); 
+    if (request->hasParam("msec"))
+    {
+      int ms = request->getParam("msec")->value().toInt();
+    }
+    else
+    {
+      pressFullWithDelay(1000);
+    }
+    digitalWrite(LED_BUILTIN, LOW); 
+    request->send(200,"application/json","{\"result\":\"true\"}");
+   });
+
+   server.on("/api/reset",HTTP_GET, [](AsyncWebServerRequest *request)
+   {
+    Serial.println("api/reset");
+    digitalWrite(LED_BUILTIN, HIGH); 
+    unPress();
+    digitalWrite(LED_BUILTIN, LOW); 
+    request->send(200,"application/json","{\"result\":\"true\"}");
+   });
+
+    server.on("/api/multiple",HTTP_GET, [](AsyncWebServerRequest *request)
+   {
+    Serial.println("api/multiple");
+    digitalWrite(LED_BUILTIN, HIGH); 
+    if (request->hasParam("count") && request->hasParam("delay"))
+    {
+      int ms = 1000;
+      int count = request->getParam("count")->value().toInt();
+      int delayMs = request->getParam("delay")->value().toInt();
+      if (request->hasParam("msec"))
+      {
+        ms = request->getParam("msec")->value().toInt();
+      }
+      if (!isFocusPressed)
+      {
+        halfPress();
+        delay(1000);
+      }
+      while (count>0)
+      {
+        fullPress();
+        delay(ms);
+        digitalWrite(D2, LOW);
+        count--;
+        delay(delayMs);
+      }
+    }
+    digitalWrite(LED_BUILTIN, LOW); 
+    request->send(200,"application/json","{\"result\":\"true\"}");
+   });
+   server.on("/get", HTTP_GET, [](AsyncWebServerRequest *request){    request->send(200, "text/plain", "Is working"); });
+    server.begin();
+}
+
+void halfPress()
+{
+    digitalWrite(D1, HIGH);
+    isFocusPressed = true;
+}
+
+void fullPress()
+{
+  if (!isFocusPressed)
+    {
+      halfPress();
+      delay(1000);
+    }
+    
+    digitalWrite(D2, HIGH);
+}
+
+void pressFullWithDelay(int ms)
+{
+    fullPress();
+    delay(ms);
+    unPress();
+}
+
+void unPress()
+{
+  digitalWrite(D2, LOW);
+  digitalWrite(D1, LOW);
+  isFocusPressed = false;
+}
+
+void multipleShoot(int ms, int count, int delayMs)
+{
+  if (!isFocusPressed)
+      {
+        halfPress();
+        delay(1000);
+      }
+  while (count>0)
+      {
+        fullPress();
+        delay(ms);
+        digitalWrite(D2, LOW);
+        count--;
+        delay(delayMs);
+      }  
+}
+
+
+void loop() {
+  // put your main code here, to run repeatedly:
+
+}