たまに 改善日記

たまに改善したことを書いていきます。改善が誰かのお役に立てばいいなって思います。

アルディーノwifiにつなぎ色々な操作をする ネット検索

wifiの接続方法がここに書いてました。
Arduinoマイコンとしても使える小型WifiモジュールESP-WROOM-02を使ってみる(Arduino利用編) | Device Plus - デバプラ
スケッチにwifiのがあるようでした、このサイトでは色々動かしてました。

const char *ssid = "ここには無線ルーターSSIDを記述";
const char *password = "ここには無線ルーターのパスワードを記述";

// Create an instance of the server
// specify the port to listen on as an argument
WiFiServer server(80);

void setup() {
Serial.begin(115200);
delay(10);

// Connect to WiFi network
Serial.println();
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");

// Start the server
server.begin();
Serial.println("Server started");

// Print the IP address
Serial.println(WiFi.localIP());
}
ここまではわかりました。wifiモジュールをサーバーにして接続できるようにしたり情報を取得するようでした。そのあとの処理はよく分からないですけどいろんな操作をしてました。loopで処理してました。園芸の散水装置を時刻を取得できたら蛇口ひねったり、モーターを動かしたりしたらできるなって思いました。園芸の散水装置ではタンクから水を出すのにどうしようか迷ってます。

このサイトだと時刻を取得していました。このサイトのプログラミングを貼り付けたらwifi時計ができそうでした。
WROOM 単体に Arduino スケッチで Wi-Fi ストリーミング
これがntpから時刻を取得するようでした。
//************NTPサーバータイム取得関数*****************************
const int timeZone = 9; // 日本時間
//const int timeZone = 1; // Central European Time
//const int timeZone = -5; // Eastern Standard Time (USA)
//const int timeZone = -4; // Eastern Daylight Time (USA)
//const int timeZone = -8; // Pacific Standard Time (USA)
//const int timeZone = -7; // Pacific Daylight Time (USA)

time_t getNtpTime()
{
while (udp.parsePacket() > 0) ; // discard any previously received packets
sendNTPpacket(timeServerIP);
uint32_t beginWait = millis();
while (millis() - beginWait < 1500) {
delay(1);//これを入れないと更新できない場合がある。
int size = udp.parsePacket();
if (size >= NTP_PACKET_SIZE) {
udp.read(packetBuffer, NTP_PACKET_SIZE); // read packet into the buffer
unsigned long secsSince1900;
// convert four bytes starting at location 40 to a long integer
secsSince1900 = (unsigned long)packetBuffer[40] << 24;
secsSince1900 |= (unsigned long)packetBuffer[41] << 16;
secsSince1900 |= (unsigned long)packetBuffer[42] << 8;
secsSince1900 |= (unsigned long)packetBuffer[43];
return secsSince1900 - 2208988800UL + timeZone * SECS_PER_HOUR;
}
}
return 0; // return 0 if unable to get the time
}
時刻を取得できたら時計はできそうだなって思いました。自力で作れずネットで検索してコピーしてます。自力で作るなんて今はまだ無理だなって考えます。途中にyield();これがないと動かないって書いてて何だろうと思って調べました。
Arduino - SchedulerYield
Passes control to other tasks when called. Ideally yield() should be used in functions that will take awhile to complete.ってい書いてました。continueでしょうか?調べたらreturn キーワードのジェネレーター版らしいです、ジェネレータって何かわかりません。メモリを使う処理だったら一時中断して次のタスクに移動して処理が終わったら戻るみたいなことを書いてました、優先順位を決めて実行する関数らしいです。優先順位はどうやって決めるのか分からなかった。