2024年9月1日日曜日

Blynk (Legacy )ロボットアーム操作

2020年に製作したロボットアームを旧Blynkが使えるBlynk (Legacy )ローカルサーバーによるスマホアプリBlynk (Legacy )からESP8266制御ロボットアームを操作しました。  













動画



参考サイト
●Blynk(Legacy)を自前サーバー構築で無料かつ使い放題スマートホーム実現の方法【https://androshudan.com/blynk-local-server-5265.html

Blynk Legacyローカルサーバー
 Blynk Legacyローカルサーバー
(Raspberry Pi 3B+)
Blynk Legacyローカルサーバーから旧BlynkアプリによるRaspberry Pi ロボットアーム操作。
●  同ブログ関連記事:【Blynk (Legacy )ローカルサーバー構築


ESP8266
ESP8266 ESP-12F
●ESP8266 ESP-12F(技適製品)
WiFi 開発ボード
(USB Type-Cから電源供給)
●PCA9685 16チャネル PWM/サーボ ドライバー (I2C接続)
(外部から5V電源供給)


図面



スマホアプリBlynk (Legacy )
※Raspberry Pi ローカルサーバーを立ち上げておく。

●My Devices
【プロジェクト名】
【デバイス】選択
【コネクトタイプ】選択
















スマホにボタン・スライダー配置
●Slider Settings
 サーボモータコントロール
 V0-V5

●Button Settings
  ポジション設定
  V10-V12
























スマホ操作画面




Raspberry Pi ブラウザ
※Raspberry Pi 画面を表示する
(リモートデスクトップ接続 )
●Blynk (Legacy )ローカルサーバー ブラウザ
【//127.0.1.1:9443/admin#/users/edit/xxxxx@gmail.com-Blynk】
Tokenをコピー
●同ブログ関連記事:【Blynk (Legacy )ローカルサーバー構築】




Arduino IDE


 






















ESP32プログラム
#define BLYNK_PRINT Serial
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <Wire.h>
#include <Adafruit_PWMServoDriver.h>
Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver();

char auth[] = "................................D-pn";
char ssid[] = "xxxxxxxx";
char pass[] = "xxxxxx";
char server[] = "192.168.1.81";
int port = 8080;


int SLIDER;
int SLIDER0;
int SLIDER1;
int SLIDER2;
int SLIDER3;
int SLIDER4;
int SLIDER5;
int nSLIDER0;
int nSLIDER1;
int nSLIDER2;
int nSLIDER3;
int nSLIDER4;
int nSLIDER5;

BLYNK_WRITE(V0) {
  SLIDER = param.asInt();
  if( SLIDER > SLIDER0 ) {
     for (SLIDER0; SLIDER0 != SLIDER ; SLIDER0++){
      pwm.setPWM(0, 0, SLIDER0);
      delay(10);
   }
  }
  else if( SLIDER < SLIDER0 ) {
    for (SLIDER0; SLIDER0 != SLIDER ; SLIDER0--){
      pwm.setPWM(0, 0, SLIDER0);
      delay(10);
  }    
 }
}
BLYNK_WRITE(V1) {
  int SLIDER = param.asInt();
  if( SLIDER > SLIDER1 ) {
     for (SLIDER1; SLIDER1 != SLIDER ; SLIDER1++){
      pwm.setPWM(1, 0, SLIDER1);
      delay(10);
   }
  }
  else if( SLIDER < SLIDER1 ) {
    for (SLIDER1; SLIDER1 != SLIDER ; SLIDER1--){
      pwm.setPWM(1, 0, SLIDER1);
      delay(10);
  }    
 }
  
BLYNK_WRITE(V2) {
  int SLIDER = param.asInt(); 
  if( SLIDER > SLIDER2 ) {
     for (SLIDER2; SLIDER2 != SLIDER ; SLIDER2++){
      pwm.setPWM(2, 0, SLIDER2);
      delay(10);
   }
  }
  else if( SLIDER < SLIDER2 ) {
    for (SLIDER2; SLIDER2 != SLIDER ; SLIDER2--){
      pwm.setPWM(2, 0, SLIDER2);
      delay(10);
  }    
 }

BLYNK_WRITE(V3) {
  int SLIDER = param.asInt();
   if( SLIDER > SLIDER3 ) {
     for (SLIDER3; SLIDER3 != SLIDER ; SLIDER3++){
      pwm.setPWM(3, 0, SLIDER3);
      delay(10);
   }
  }
  else if( SLIDER < SLIDER3 ) {
    for (SLIDER3; SLIDER3 != SLIDER ; SLIDER3--){
      pwm.setPWM(3, 0, SLIDER3);
      delay(10);
  }    
 }
}  

BLYNK_WRITE(V4) {
  int SLIDER = param.asInt(); 
  if( SLIDER > SLIDER4 ) {
     for (SLIDER4; SLIDER4 != SLIDER ; SLIDER4++){
      pwm.setPWM(4, 0, SLIDER4);
      delay(10);
   }
  }
  else if( SLIDER < SLIDER4 ) {
    for (SLIDER4; SLIDER4 != SLIDER ; SLIDER4--){
      pwm.setPWM(4, 0, SLIDER4);
      delay(10);
  }    
 }
}  
 
BLYNK_WRITE(V5) {
  int SLIDER = param.asInt();
   if( SLIDER > SLIDER5 ) {
     for (SLIDER5; SLIDER5 != SLIDER ; SLIDER5++){
      pwm.setPWM(5, 0, SLIDER5);
      delay(50);
   }
  }
  else if( SLIDER < SLIDER5 ) {
    for (SLIDER5; SLIDER5 != SLIDER ; SLIDER5--){
      pwm.setPWM(5, 0, SLIDER5);
      delay(50);
  }    
 }

BLYNK_WRITE(V10) {
  nSLIDER0 = 400;   
  nSLIDER1 = 500;  
  nSLIDER2 = 600;  
  nSLIDER3 = 400;  
  nSLIDER4 = 400; 
  nSLIDER5 = 400;
  slider();
BLYNK_WRITE(V11) {
  nSLIDER0 = SLIDER0;   
  nSLIDER1 = 375;  
  nSLIDER2 = 600;  
  nSLIDER3 = 375;  
  nSLIDER4 = 400; 
  nSLIDER5 = 500;
  slider();
  
BLYNK_WRITE(V12) {
  nSLIDER0 = SLIDER0;  
  nSLIDER1 = 375;  
  nSLIDER2 = 600;  
  nSLIDER3 = 375;  
  nSLIDER4 = 400; 
  nSLIDER5 = 400;
  slider();  
 
   


void slider(){  
  if( nSLIDER0 > SLIDER0 ) {
     for (SLIDER0; SLIDER0 != nSLIDER0 ; SLIDER0++){
      pwm.setPWM(0, 0, SLIDER0);
      delay(10);
   }
  }
  else if( nSLIDER0 < SLIDER0 ) {
    for (SLIDER0; SLIDER0 != nSLIDER0 ; SLIDER0--){
      pwm.setPWM(0, 0, SLIDER0);
      delay(10);
  }    
 }
  if( nSLIDER1 > SLIDER1 ) {
     for (SLIDER1; SLIDER1 != nSLIDER1 ; SLIDER1++){
      pwm.setPWM(1, 0, SLIDER1);
      delay(10);
   }
  }
  else if( nSLIDER1 < SLIDER1 ) {
    for (SLIDER1; SLIDER1 != nSLIDER1 ; SLIDER1--){
      pwm.setPWM(1, 0, SLIDER1);
      delay(10);
  }    
 }
  if( nSLIDER2 > SLIDER2 ) {
     for (SLIDER2; SLIDER2 != nSLIDER2 ; SLIDER2++){
      pwm.setPWM(2, 0, SLIDER2);
      delay(10);
   }
  }
  else if( nSLIDER2 < SLIDER2 ) {
    for (SLIDER2; SLIDER2 != nSLIDER2 ; SLIDER2--){
      pwm.setPWM(2, 0, SLIDER2);
      delay(10);
  }    
 }
   if( nSLIDER3 > SLIDER3 ) {
     for (SLIDER3; SLIDER3 != nSLIDER3 ; SLIDER3++){
      pwm.setPWM(3, 0, SLIDER3);
      delay(10);
   }
  }
  else if( nSLIDER3 < SLIDER3 ) {
    for (SLIDER3; SLIDER3 != nSLIDER3 ; SLIDER3--){
      pwm.setPWM(3, 0, SLIDER3);
      delay(10);
  }    
 }
  if( nSLIDER4 > SLIDER4 ) {
     for (SLIDER4; SLIDER4 != nSLIDER4 ; SLIDER4++){
      pwm.setPWM(4, 0, SLIDER4);
      delay(10);
   }
  }
  else if( nSLIDER4 < SLIDER4 ) {
    for (SLIDER4; SLIDER4 != nSLIDER4 ; SLIDER4--){
      pwm.setPWM(4, 0, SLIDER4);
      delay(10);
  }    
 }
   if( nSLIDER5 > SLIDER5 ) {
     for (SLIDER5; SLIDER5 != nSLIDER5 ; SLIDER5++){
      pwm.setPWM(5, 0, SLIDER5);
      delay(10);
   }
  }
  else if( nSLIDER5 < SLIDER5 ) {
    for (SLIDER5; SLIDER5 != nSLIDER5 ; SLIDER5--){
      pwm.setPWM(5, 0, SLIDER5);
      delay(10);
  }    
 }
  nSLIDER1 = 500;
  if( nSLIDER1 > SLIDER1 ) {
     for (SLIDER1; SLIDER1 != nSLIDER1 ; SLIDER1++){
      pwm.setPWM(1, 0, SLIDER1);
      delay(10);
   }
  }
  else if( nSLIDER1 < SLIDER1 ) {
    for (SLIDER1; SLIDER1 != nSLIDER1 ; SLIDER1--){
      pwm.setPWM(1, 0, SLIDER1);
      delay(10);
  }    
}
}
void setup()
{
  Serial.begin(9600);
  Wire.pins(4, 5);
  pwm.begin();
  pwm.setPWMFreq(60);   
  Blynk.begin(auth, ssid, pass, server, port);
  SLIDER0 = 400;   
  SLIDER1 = 500;  
  SLIDER2 = 600;  
  SLIDER3 = 400;  
  SLIDER4 = 400; 
  SLIDER5 = 400;
  pwm.setPWM(0, 0, SLIDER0);
  pwm.setPWM(1, 0, SLIDER1);
  pwm.setPWM(2, 0, SLIDER2);
  pwm.setPWM(3, 0, SLIDER3);
  pwm.setPWM(4, 0, SLIDER4); 
  pwm.setPWM(5, 0, SLIDER5);
}

void loop()
{
  Blynk.run();
}


0 件のコメント:

コメントを投稿

FST3253 - 直交ミキサ製作

アマゾンの口コミ(SDRトランシーバーに使用出来る)を見てFST3253MTCとピッチ変換基板を購入、FST3253 直交ミキサ基板を製作してPi Pico Rxで受信確認できました。  ●Pi Pico Rx  【 https://101-things.readthedocs....