準備
コンパイル
必要な情報は次のとおりです。
個別設定ファイルを作成して、主スケッチから #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関係のコード(スケッチ)が有効になります。