準備
コンパイル
必要な情報は次のとおりです。
個別設定ファイルを作成して、主スケッチから #include
で読み込んでもいいし、直接スケッチ上部の定義部の部分を修正しても大丈夫です。
// -*- c -*- // WiFi configuration (2.4GHz) // #ifndef DEF_CONF_WIFI #define DEF_CONF_WIFI //const char *ssid = "AP-SSID"; //const char * password = "secret-key"; const char * ap_list[] = { "SSID1,Key1", "SSID2,Key2" }; #endif /* IP configuration DHCPでIPアドレスなどを取得する場合は#define USE_DHCP を、 固定IPの場合は #define USE_DHCP をコメントアウトして、その下の情報を定義してください。 */ //#define USE_DHCP #if !defined( USE_DHCP ) && !defined( DEF_CONF_IP ) #define DEF_CONF_IP IPAddress local_IP(192, 168, 1, 59); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 255, 0); IPAddress primaryDNS(8, 8, 8, 8); IPAddress secondaryDNS(8, 8, 4, 4); #endif WiFiMulti wifiMulti; // // for APRS-IS // for Ham Radio // APRS-ISに気象情報を送信する場合は、#define USE_APRSを有効にしてください。 // //#define USE_APRS #if defined( USE_APRS ) && !defined( DEF_CONF_APRS ) #define DEF_CONF_APRS const char * callsign_ssid = "NOCALL-13"; // コールサイン-SSIDを忘れずに const int passcode = 00000; // APRS-ISにアクセスするためのpasscode // // センサを室内に設置する場合、その気温と湿度をAPRS-ISに送信しても、あまり意味がありませんので // その場合は、下記の2変数を 0 にしてください。 // ただし、現行のAPRSでは、温度、湿度を空データにすることは仕様上できないかもしれません。 const int send_humidity = 1; const int send_temperature = 1; // Your Location const float lat = 33.0000; // 緯度 const float lng = 130.0000; // 経度 const float altitude = 75; // altitude [m] // 標高 [m] (気圧の補正用) // Upstream APRS-IS const char * host = "fukuoka.aprs2.net"; // Old-T2FUKUOKA or fukuoka.aprs2.net const uint16_t port = 14580; const int aprs_update_interval = 5; // 更新間隔 [分] #endif // // WebServer機能を有効にする場合は #define USE_WEBSERVER を有効にしてください // //#define USE_WEBSERVER // // // //#define USE_DEEP_SLEEP // // // // ESP32 and MBE280 Hardware configuration // #ifndef DEF_CONF_GPIO #define DEF_CONF_GPIO const uint8_t Address = 0x76; //const uint8_t Address = 0x77; // // BME280の SDA, SCLを接続したGPIOに合わせて変更してください // 接続したGPIOに合わせて変更してください // // 利用不可能なGPIO (ESP32) // 6,7,8,9,10,11,15 その他色々・・・ // M5Stackの場合、次のGPIOは内部で利用されているため利用できません // 0,1,3,18,19,23,25 // LCD関係 14,18,23,27,33 // 34-39 は INPUTのみ // M5Stackの場合、センサーとして、https://amzn.to/34NHbXi を使う場合は、下記がオススメ // BME280とM5Stackはできる限り離してください:M5Stackの熱の影響を受けて、通常より数度温度があがって計測されてしまいます // (ただし、Groveとは SDA, SCLが入れ替えた設定です。Groveを併用する場合は注意) // const uint8_t sda = 22; // const uint8_t scl = 21; // その他は、回路図を追っかけてください // https://github.com/m5stack/M5-Schematic/blob/master/Core/Basic/M5-Core-Schematic(20171206).pdf const uint8_t sda = 21; const uint8_t scl = 22; //const uint8_t sda = 32; //const uint8_t scl = 33; // // LED configureation // LEDを接続しない場合は、0を指定する // M5Stackの場合は33は利用不可 const uint8_t busy_led = 0; #endif #if !defined( DEF_CONF_USE_ANALOG ) #define DEF_CONF_USE_ANALOG // // アナログセンサを接続する場合は、#define USE_ANALOG を定義してください。 // #define USE_ANALOG const int analog_gpio[] = { 34, 35 }; #endif #if !defined( DEF_CONF_MORSE_LED ) #define DEF_CONF_MORSE_LED // // 気温などをモールス信号(LED)で通知 #define USE_MORSE_LED const uint8_t morse_led = busy_led; const uint8_t morse_speed = 200; // 数値を小さくすると速くなります #endif // // M5Stackを利用する場合は、USE_M5STACKを定義する、ESP32開発ボードの場合はコメントアウト //#define USE_M5STACK #define LCD_BRIGHTNESS 150 #define USE_M5STACK_POWER_CONTROL #if !defined( DEF_CONF_USE_LCD_SSD1306 ) #define DEF_CONF_USE_LCD_SSD1306 // // // https://amzn.to/2ntemy9 を使う場合は、下記を有効にしてください。(テスト中) //#define USE_LCD_SSD1306 // #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 32 // OLED display height, in pixels #endif #if !defined( DEF_CONF_USE_MQTT ) #define DEF_CONF_USE_MQTT // MQTTに気象データを送信する場合は USE_MQTTを定義してください。 // ライブラリーは https://github.com/knolleary/pubsubclient // #define USE_MQTT const char * mqtt_host = "ketaitracker.info"; const int mqtt_port = 1883; const char * mqtt_topic_prifix = "aprs/wx"; char mqtt_topic[256]; // = "aprs/wx/dummy"; // test now #endif #ifndef DEF_CONF_USE_OTA #define DEF_CONF_USE_OTA // // OTAを利用する場合は#define USE_OTAを有効にしてください。 // Bluetooth経由でプログラムの更新ができるようになります。 #define USE_OTA #endif
Wi-Fiの接続情報を下記の通り指定してください。(Ver 0.7.6よりWifiMultiに変更)
const char * ap_list[] = {
"SSID1,Key1",
"SSID2,Key2"
};
設置する環境に応じて数を増減してください。
DHCPを利用する場合は #define USE_DHCP
で定義してください。
DHCPを利用しない場合は、下記の設定を行ってください。
ドットノーテーション形式で記述したくなりますが、",
"区切りです。
IPAddress local_IP(192, 168, 1, 59);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress primaryDNS(8, 8, 8, 8);
IPAddress secondaryDNS(8, 8, 4, 4);
APRS-ISにデータを送信する場合は USE_APRS
を定義してください。
#define USE_APRS
const char * callsign_ssid = "NOCALL-13";
const int passcode = 00000;
const float lat = 33.0000;
const float lng = 130.0000;
海抜を指定してください(単位メートル)。 BME280で測定した気圧を高度で補正してAPRS-ISに送信します。
const float altitude = 75;
M5StackではLCDに気圧がリアルタイムで表示されますが、これは高度による補正を行っていない値です。
const char * host = "wave.ftokai-u.ac.jp";
wave.ftokai-u.ac.jpは旧T2FUKUOKAです。
const uint16_t port = 14580;
14580ポートに接続し、フィルターを定義していませんので、結果としてAPRS-IS側からの下りパケットはありません。
const int aprs_update_interval = 5;
APRS-ISへのアップロード間隔を分単位で指定してください。 アップロードされる情報は、その瞬間値であり、aprs_update_intervalで指定した期間の平均値ではありません。 (本来は、平均値がいいのかもしれません)
APRS-ISに気温情報を送信するかの指定です。
const int send_temperature = 1;
※現行のAPRS仕様では、気温を「情報なし」の状態で送信すると、気象データとして認識されないようです。
APRS-ISに湿度情報を送信するかの指定です。
const int send_humidity = 1;
※現行のAPRS仕様では、湿度を「情報なし」の状態で送信すると、気象データとして認識されないようです。
Web Server機能を有効にする場合、USE_WEBSERVER
を定義してください。
DeepSleepを有効にした場合、WebServer機能は無効になります。
#define USE_WEBSERVER
WebServerを有効にした場合、アクセスすると下記のようにJSON形式でデータを返します。
{"temperature":30.23,"humidity":46.96,"pressure":1009.38}
DeepSleepを有効にする場合は、USE_DEEP_SLEEP
を定義してください。
#define USE_DEEP_SLEEP
BME280のアドレスを指定してください。
const uint8_t Address = 0x76;
BME280のSDAを接続したGPIOの番号を指定してください。
const uint8_t sda = 21;
ここで指定されたGPIOピンはESP32内部でプルアップされます。
BME280のSCLを接続したGPIOの番号を指定してください。
const uint8_t scl = 22;
ここで指定されたGPIOピンはESP32内部でプルアップされます。
Busy状態を示すLEDを接続したGPIOの番号を指定してください。
LEDを接続しない場合は0
を指定してください。
LEDを接続しない場合は、影響のないGPIOを指定してください。
const uint8_t busy_led = 25;
モールス信号用のLEDを接続したGPIOの番号を指定してください。
LEDを接続しない場合は0
を指定してください。
busy_ledで指定したLEDと共用することもできます。この場合、busy_ledと同じ番号を指定してください。ただし、busy_ledの点灯と排他制御を行っていませんので、busy_ledとmorse_ledの状態がQRMすることがあります。
LEDを使ったモールス信号で気温などを通知します。(100%お遊び機能です)
短縮形(数値)への変更も可能です(ソースのconst char * morse_code[] =...
の部分を修正してください。
M5Stackの場合はUSE_M5STACK
を定義してください。
これを定義することによりLCD関係のコード(スケッチ)が有効になります。