SSブログ

Arduinoライブラリでエアコン(HEAT PUMP)を制御 家庭でできるIoT! 2パルス目 [ESP32]

2019-12-06 16.11.56.png誰も期待していないでしょうけれど、Blynkで動かす。

いろいろな都合でエアコンは三菱に変更している
/*
  ダイキン,,,もとい三菱のエアコンの制御サンプル
  以下のライブラリを利用する。
  Arduinoのライブラリマネージャーからもインストールできる。
  https://github.com/ToniA/arduino-heatpumpir
*/
//#include  <DaikinHeatpumpIR.h>
#include  <MitsubishiHeatpumpIR.h>
#include  <ESP8266WiFi.h>
#include  <BlynkSimpleEsp8266.h>  /* Blynk library */
#include  "authentication.h"  /* 認証用ファイル */

/*************************************************************************/
/* defines                                                               */
/*************************************************************************/
#define   IR_CONT    12  // Ir control

/*************************************************************************/
/* instances                                                             */
/*************************************************************************/
IRSenderBitBang irSender( IR_CONT );  /* 赤外線送信用インスタンスの生成。引数は赤外線LEDが接続されているピン番号 */
//HeatpumpIR *airCon = new DaikinHeatpumpIR();  /* ダイキンのエアコンのインスタンスの生成 */
HeatpumpIR *airCon = new MitsubishiFDHeatpumpIR();  /* 三菱のエアコンのインスタンス */
IPAddress myIP; // self IP address
// Attach virtual serial terminal to Virtual Pin V1
WidgetTerminal terminal(V1);

/*************************************************************************/
/* global variables                                                      */
/*************************************************************************/
/*wifi AP informations*/
const struct ACCESS_POINT_LIST
{
  const char *ssid;
  const char *pass;
} ap[] =
{
  { SSID_STATION_HOME, PASSWORD_STATION_HOME },
  { SSID_STATION, PASSWORD_STATION },
};
char blynkAuth[] = BLYNK_AUTH;

/***************************************************************************/
/* associate to  wifi AP                                                   */
/***************************************************************************/
int associateToAP( const char *id, const char *ps )
{
  WiFi.begin( id, ps );
  int i = 0;
  while( WiFi.status() != WL_CONNECTED )  /*だいたい8秒から10秒くらい接続に掛かっている。*/
  {
    delay( 100 );
    Serial.print( "." );
    if(++i >= (15000 / 100))  /*15秒で諦める*/
    {
      return (-1);  //end of routine
      ESP.reset();
      //ESP.deepSleep(1 * 1000 * 1000UL, WAKE_RF_DEFAULT );  //old code was WAKE_RF_DISABLED 
      delay( 100 );
    }
  }
  return i;
}

/*************************************************************************/
/* setup                                                                 */
/*************************************************************************/
void setup()
{
  Serial.begin( 115200 );
  Serial.println();
  pinMode( IR_CONT, OUTPUT );
  digitalWrite( IR_CONT, LOW );

  /*アクセスポイントへ接続*/
  Serial.println( "connect to AP." );
  if( associateToAP( ap[ 0 ].ssid, ap[ 0 ].pass ) < 0 )
  {
    /*接続に失敗した時、リストから検索して接続してみる*/
    int i;
    for( i = 0; i < sizeof(ap) / sizeof(ap[0]); i++ )
    {
      int ret = associateToAP( ap[i].ssid, ap[i].pass );
      if( ret >= 0 )
      {
        Serial.print( "\r\n AP connect time = " );
        Serial.print( ret * 100, DEC );
        Serial.println( "ms" );
        break;
      }
    }
    if( i == sizeof(ap) / sizeof(ap[0]) )  /*接続に失敗した場合*/
    {
      ESP.reset();
      //ESP.deepSleep( 1 * 1000 * 1000UL, WAKE_RF_DEFAULT );  //old code was WAKE_RF_DISABLED
      delay(100);
    }
  }
  myIP = WiFi.localIP();
  Serial.print( "\r\nIP number assigned by DHCP is " );
  Serial.println( myIP );

  /* initialize blynk. */
//  Blynk.begin( blynkAuth, ssid, pass );
  Blynk.config( blynkAuth );
}

/*************************************************************************/
/* loop                                                                  */
/*************************************************************************/
void loop()
{
  Blynk.run();  /* executing blynk. */
}

/*************************************************************************/
/*  blynk virtual pin 0 function.                                        */
/*************************************************************************/
BLYNK_WRITE( V0 )
{ 
  int value = param.asInt();
  if( value )
  {
    /* ir instance,power,mode,fan,temperature,swing vertical,swing horizontal */
    airCon->send( irSender, POWER_ON, MODE_AUTO, FAN_AUTO, 24, VDIR_DOWN, HDIR_AUTO );  /* power on */
    terminal.println( "power on." );
  }
  else
  {
    /* ir instance,power,mode,fan,temperature,swing vertical,swing horizontal */
    airCon->send( irSender, POWER_OFF, MODE_AUTO, FAN_AUTO, 24, VDIR_DOWN, HDIR_AUTO );  /* power off */
    terminal.println( "power off." );
  }
  terminal.flush();
}


ChaNさんのリモコンコードの解説ページ、、、httpsではない!
http://elm-chan.org/docs/ir_format.html


ESP-WROOM-02開発ボード

ESP-WROOM-02開発ボード

  • 出版社/メーカー: スイッチサイエンス(Switch Science)
  • メディア: おもちゃ&ホビー









nice!(0)  コメント(0) 

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。