「開発」カテゴリーアーカイブ

MyDns.jp更新装置

MyDnsでDDNSを登録して取得しているが、IPの更新が手間なので
M5StickCPlusを使った更新装置の記事を見た・・・どこだっけ?

今使っているソース(自前用に改修したやつ)
XXXXXXなどWifiやMyDns.jpの情報を変更して使用できます。

#include <M5StickCPlus.h>
#include <HTTPClient.h>
#include <NTPClient.h>
#include <Time.h>
#include <TimeLib.h>
#include <FS.h>
#include <WiFi.h>
#include <WiFiClient.h>

#define SERIAL_SPEED 115200

// wifiの設定(my)
const char* ssid     = "XXXXXXXXXXX"; // WiFiのSSID
const char* password = "XXXXXXXXXXX"; // WiFiのパスワード

// mydns info.(xxxxx.mydns.jp)
const char* id="mydnsXXXXXX"; //マスターID
const char* pw="XXXXXXXXXXX"; //パスワード

//  NTP用
WiFiUDP ntpUDP;
const char *NTP_SERVER = "ntp.nict.jp";
const int TIME_OFFSET = 32400;  // UTC+9h (JST)
NTPClient timeClient(ntpUDP, NTP_SERVER, TIME_OFFSET);
const unsigned long NTP_INTERVAL_TIME = 86000000;  // 24h毎に更新1000 24h=86400000
unsigned long ntp_interval = 0;
unsigned long pasttime = 0;

String getmsg = "";

void setup() {
  pinMode(M5_BUTTON_HOME, INPUT);
  Serial.begin(SERIAL_SPEED);
  Serial.println("");
  M5.begin();
  M5.Lcd.setRotation(3);
  M5.Axp.ScreenBreath(100);
  M5.Lcd.fillScreen(BLACK);

  // connect to WiFi
  M5.Lcd.setCursor(0, 0, 1);
  M5.Lcd.setTextColor(WHITE);
  M5.Lcd.setTextSize(2);
  M5.Lcd.print("WiFi connecting");

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) { // 1秒おきに接続状態を確認
    delay(1000);
    M5.Lcd.print(".");
  }
  M5.Lcd.println("\nconnected");

  M5.Lcd.print("");
  //M5.Lcd.print("WiFi Connected.");
  M5.Lcd.print("SSID:");
  M5.Lcd.print(WiFi.SSID());
  M5.Lcd.print("\n");
  M5.Lcd.print("IP:");
  M5.Lcd.print(WiFi.localIP());
  M5.Lcd.print("\n");

  // NTP
  timeClient.begin();
  timeClient.update();
  setTime(timeClient.getEpochTime());
  M5.Lcd.print("NTP st.");
  ntp_interval = millis();
  M5.Lcd.print(timeClient.getFormattedTime());
  M5.Lcd.print("\n");


  delay(3000);
  M5.Lcd.print("First Req");
  M5.Lcd.print("\n");
  notice();
}

void loop() {
  //M5ボタンでモード切替
  if(digitalRead(M5_BUTTON_HOME) == LOW){
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print("\n");
    M5.Lcd.print(" Update Now!\n");
    M5.Lcd.print("\n");
    M5.Lcd.print("\n");
    notice(); 
    delay(5000);
  }

  // MDNS.update();
  // 定期的に時刻を合わせて、IPを通知。
  pasttime = millis() - ntp_interval;
  if (pasttime > NTP_INTERVAL_TIME) {
    //M5.Lcd.fillScreen(BLACK);
    M5.Lcd.fillRect(0,0,300,70,BLACK); // 塗りつぶし left, top, witdh, height
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print("\n");
    M5.Lcd.print(" Update Now!\n");
    M5.Lcd.print("\n");
    M5.Lcd.print("\n");
    delay(5000);
    timeClient.update();
    M5.Lcd.fillScreen(BLACK);
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.setTextFont(7);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print(timeClient.getFormattedTime());
    M5.Lcd.print("\n");
    M5.Lcd.print("\n");
    notice();
    ntp_interval = millis();
  }else{
    if(getmsg="200"){
      M5.Lcd.fillRect(0,0,300,70,BLACK); // 塗りつぶし left, top, witdh, height
    }else{
      M5.Lcd.fillScreen(RED);
    }
    M5.Lcd.setCursor(0, 0, 1);
    M5.Lcd.setTextColor(GREEN);
    M5.Lcd.setTextFont(7);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print(timeClient.getFormattedTime());
    M5.Lcd.print("\n");
    M5.Lcd.setTextFont(4);
    M5.Lcd.setTextSize(1);
    M5.Lcd.print(NTP_INTERVAL_TIME / 1000);
    M5.Lcd.print(" > ");
    M5.Lcd.print(pasttime / 1000);
    M5.Lcd.print("\n");
    M5.Lcd.print("http GET= ");
    M5.Lcd.print(getmsg);
    M5.Lcd.print("\n");
    M5.Lcd.print("Push M5:update");
    M5.Lcd.print("\n");
    delay(1000);    
  }
}

void notice() {
  timeClient.update();
  // 通知
  WiFiClient client;
  HTTPClient http;
  http.begin(client, "http://ipv4.mydns.jp/login.html");
  http.setAuthorization(id, pw);
  M5.Lcd.setTextFont(4);
  M5.Lcd.setTextSize(1);
  M5.Lcd.print("http GET= ");
  getmsg = http.GET();
  M5.Lcd.print(getmsg);
  M5.Lcd.print("\n");
  timeClient.update();
  M5.Lcd.fillScreen(BLACK);
  M5.Lcd.setCursor(0, 0, 1);
  M5.Lcd.setTextColor(GREEN);
  M5.Lcd.setTextFont(7);
  M5.Lcd.setTextSize(1);
  M5.Lcd.print(timeClient.getFormattedTime());
  M5.Lcd.print("\n");
  M5.Lcd.print("\n");
  ntp_interval = millis();
}

Arduino IDE 2.3.6

ASP.NET Core WEB・APP

ASP.NETでWEBアプリを作成

サンプルとして、ネットで紹介されている手順で作成してみた
サンプルはVS2019でしたが、2022で同じように作成してみた

・・・途中で、データベースファーストのEFでのウィザードが正しく動かない

しかたないので、VS2019で作成したら、一応できた。

なにか足りない?

SDK?

BLAZORへ移行しろということか?

・・・

追記:202050522

分かったこと

VS2022でASP.NET WEBアプリ(.NetFramework)を選択したら
バージョンは4.7.2~4.8.1が選択できる(4.7.2)

まず、デフォルトのサンプルプロジェクトができたら
NuGet管理を起動して、インストール済みの一覧にある
EntityFramework.ja を消す (jaのやつのみ)

EntityFramework(jaなし)のバージョンを上げておく(6.5.1)

これで、VS2022で問題なくいろんなウィザードが動作する。

結局、このASP.NET Webアプリは4.8.2止まり・・・

Port=80

Apacheが起動できない。

ログを見るとPort=80が・・・と出てます

ん?

なんか使っていたっけ?

Copilotに聞いて調べても、WindowsがSystemで使用していますね・・・と

え?

で、やっと判明したのが・・・IIS

ああ~

削除して

netstat -aon | findstr :80

なにも出ません

動いた・・・すごい時間かけて・・・

つかれた

MySQL・・・その2

LinuxMintにMySQL8を入れたが、他のPCから接続できるようにする。

Linux側の設定

・MySQLにユーザーを追加(TESTAdmin)

CREATE USER '[user]'@'%' IDENTIFIED BY '[password]'
GRANT SELECT, INSERT, DELETE, UPDATE ON [databese].* TO '[user]'@'%';

・mysqld.cnfの設定変更(bind-address = 0.0.0.0 mysqlx-bind-address=0.0.0.0)

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

・FWにMySQLのポートを設定(3306)

WIndows側の設定

・Dbeaverのインストール
・接続情報の登録(TESTAdmin・test)
・接続のパラメータを追加する(allowPublicKeyRetrieval=true,useSSL=false)

ユーザー認証の設定が平文パスワードなので、セキュリティ上は低い
MySQL8では、高度な認証を設定できるので、次回、試してみる。

ポートの変更もしたいね。

LinuxMintでMySQL

何回かインストールに失敗したのでメモする

インストールは・・・

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

ここで最初にrootのパスワードを入力する。
後はひたすら「Y」でエンター
★これを理解できず何度も繰り返した(削除とインストール)

動作確認

sudo systemctl status mysql

ログインする

sudo mysql -u root -p

 でエンター

<password> さっきのrootパスワード

$ sudo mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 8.0.40-0ubuntu0.24.04.1 (Ubuntu)

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

ログインできた〜

ログアウトは
exit

自動起動設定

sudo systemctl start mysql
sudo systemctl enable mysql

さて、MySQLを全削除するには・・・

sudo systemctl stop mysql
sudo systemctl disable mysql
sudo apt-get remove --purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
sudo apt-get autoremove
sudo apt-get autoclean
sudo rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
sudo rm -rf /var/cache/mysql

これで完全に削除されるそうな・・・

SHOW DATABASES;


+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
+——————–+
4 rows in set (0.02 sec)

mysql>

DBを作成

CREATE DATABASE test;
SHOW DATABASES;


+——————–+
| Database |
+——————–+
| information_schema |
| mysql |
| performance_schema |
| sys |
| test |
+——————–+
5 rows in set (0.00 sec)

mysql>

test DBが作成できた

testtblを作成する

USE test;
CREATE TABLE testtbl (
id INT,
item VARCHAR(50),
comment VARCHAR(250)
);
SHOW TABLES;


+—————-+
| Tables_in_test |
+—————-+
| testtbl |
+—————-+
1 row in set (0.01 sec)

mysql>

DESCRIBE testtbl;


+———+————–+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+———+————–+——+—–+———+——-+
| id | int | YES | | NULL | |
| item | varchar(50) | YES | | NULL | |
| comment | varchar(250) | YES | | NULL | |
+———+————–+——+—–+———+——-+
3 rows in set (0.01 sec)

mysql>

ん〜できた

データを追加してみるか

INSERT INTO testtbl (id, item, comment) VALUES (1, 'Apple', 'This is a red apple');
INSERT INTO testtbl (id, item, comment)
VALUES
(2, 'Banana', 'This is a yellow banana'),
(3, 'Orange', 'This is an orange fruit');

SELECT * FROM testtbl;


+——+——–+————————-+
| id | item | comment |
+——+——–+————————-+
| 1 | Apple | This is a red apple |
| 2 | Banana | This is a yellow banana |
| 3 | Orange | This is an orange fruit |
+——+——–+————————-+
3 rows in set (0.00 sec)

mysql>

できた

修正(UPDATE)

 update testtbl set item='bunchan' where id=2;

Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1 Warnings: 0

SELECT * FROM testtbl;

+——+———+————————-+
| id | item | comment |
+——+———+————————-+
| 1 | Apple | This is a red apple |
| 2 | bunchan | This is a yellow banana |
| 3 | Orange | This is an orange fruit |
+——+———+————————-+
3 rows in set (0.00 sec)

mysql>

削除(DELETE)

delete from testtbl where id=2;

Query OK, 1 row affected (0.02 sec)

SELECT * FROM testtbl;

+——+——–+————————-+
| id | item | comment |
+——+——–+————————-+
| 1 | Apple | This is a red apple |
| 3 | Orange | This is an orange fruit |
+——+——–+————————-+
2 rows in set (0.01 sec)

mysql>

いいね〜

Arduino IDE 2.3.4

今まで使っていたArduino開発用PCが、もたつく・・・

漢字変換すら遅くなってしまい、息継ぎ状態・・・

Thinkpad X-280のi3モデルなので
メモリも4GBがそもそものボトルネックか・・・

Windows11にしてから、よけいに動きがにすい

そこで、別のPCに引っ越しすることにした。

Thinkpad X380 Yogaが空いていたので
そこに最新のArduino IDE2.3.4をインストール

今までのソースたちの移動も今後のことを考えて
Googleドライブで共有することにした。

GdrivePC版をインストールして、Gドライブが割り当てられるので
そこにArduinoフォルダーをおいて、そこに見に行くように設定を変える。

G:\マイドライブ\Arduino\arduino

しばらく、様子見てみる・・・

IISのログって9時間ずれる

IISを立ててます。

仕事でIISをつかったアプリを開発してるのですが
今まで、ログの日付時刻がJSTではないことに気が付きませんでした。

デフォルトのままだと

サイトのIISのログ記録の形式を「IIS」にすると
ログ内の時刻がJSTで出力された。

IIS 10.0 でログが9時間ずれているときの対応【Windows Server 2016】|No IT No Life – おすぎやん サーバの設計・構築 (server-network-info.blogspot.com)

そもそも、ログはNLogで自前でだしていたので、見てなかった・・・

BLAZOR SERVERで開発
.NET5.0なので、上げたいが、客先サーバーの要件で・・・

動作確認中
WindowsServer2012R2:IIS8.5
WindowsServer2019:IIS10.0