2023年9月29日金曜日

ESP32サーボ

ESP32で サーボを3つ動かしたいけどやり方がわからないと相談されたので作ってみました

BTシリアルから A10 B10 C10 のように送信すると、A,B,Cのサーボが動きます

依頼された方のソースを修正したものですが、

オリジナルはおそらくESP32サーボのサンプルソースだと思います

流用は問題ないと思いますので、

ピン配置(18,19,20の部分)等、カスタマイズはご自由にどうぞ



#include "BluetoothSerial.h"
#include <ESP32Servo.h> // Include the ESP32 Arduino Servo Library instead of the original Arduino Servo Library


BluetoothSerial SerialBT;

Servo myservo[3];  // create servo object to control a servo

// Possible PWM GPIO pins on the ESP32: 0(used by on-board button),2,4,5(used by on-board LED),12-19,21-23,25-27,32-33
int servoPin[3] = {18,19,20};      // GPIO pin used to connect the servo control (digital out)
String motorName[3] = {"A","B","C"};
int val[3] = {90,90,90};    // variable to read the value from the analog pin

void setup()
{
  //BTの処理
  Serial.begin(115200);
  SerialBT.begin("ESP32test");

  //Servo用の処理
  // Allow allocation of all timers
  ESP32PWM::allocateTimer(0);
  ESP32PWM::allocateTimer(1);
  ESP32PWM::allocateTimer(2);
  ESP32PWM::allocateTimer(3);
  myservo[0].setPeriodHertz(50);// Standard 50hz servo
  myservo[0].attach(servoPin[0], 500, 2400);  
  myservo[1].setPeriodHertz(50);// Standard 50hz servo
  myservo[1].attach(servoPin[1], 500, 2400);  
  myservo[2].setPeriodHertz(50);// Standard 50hz servo
  myservo[2].attach(servoPin[2], 500, 2400);
}

void loop() {
    int s,e;
    String tmp[3];
  //Bluetooth経由でのデータ取得
  if (SerialBT.available()) {
    String receiveData = SerialBT.readStringUntil(';');
    receiveData.replace(";"," ");
    // Search A,B,C
    for (int i=0;i<3;i++){
      s = receiveData.indexOf(motorName[i]);
      e = receiveData.indexOf(" ", s);
      if (s != -1){
        // set val
        tmp[i] = receiveData.substring(s+1, e);
        if (tmp[i].length() > 0){
          val[i] = tmp[i].toInt();
        }
      }
    }
    if(receiveData.length()>0){
      String tmpStr = "received A=" + tmp[0] + " B=" + tmp[1] + " C=" + tmp[2];
      SerialBT.print(tmpStr);
    }
  }
  for (int i=0;i<3;i++){
    myservo[i].write(val[i]); // set the servo position
  }
  delay(200);                 // wait
}

2023年9月23日土曜日

 Swiftでファイル操作

ファイル作成して、文字列を出力なんだけど
UTF-8も手軽

ちなみに
RaspberryPi4にWindowsのVSCODEからSSHで接続し、
RaspberryPi4上でSwiftのコンパイルして実行してる

間隔としてはMac上のXCodeで開発してる方がやはり良い
VSCodeだとあまり補完されない

Swiftならもうどこでも動かせるようになってきたので、
これからはSwiftでしょ?

Golang、Rustなど最近の言語を触ってきたけど、
Swiftが抜きんでている




開封の儀という時間の無駄

やる必要を感じない開封の儀だらけ
iPhone15ごときで記事なんざ書けないだろ
だって目新しさないんだから
pro maxの空間動画ってのは気になる

2023年9月22日金曜日

土壌phが!







雨後ですが、
いちじく鉢の土壌phを測ったら5.6 !
これはこのあたりの酸性雨のphと同じです
水が乾燥すると当然酸性度はもっと上がります

慌てて牡蠣殻石灰撒きました
鉢のphを測定しながら水くれてたら、測定器本体にかかり、内部まで染み込んでパネルがチャプチャプに!

こんな見かけなのに防水じゃないの?

仕方なく分解して組み直しました
ほっとくと絶対に基盤と液晶を繋ぐ導電ゴムのところが錆びます

買った瞬間に壊すところでした
次からはzipロックでも被せて使います

2023年9月18日月曜日

日本語プログラミング言語

最初に書いておこう
日本語がプログラミングに向いていないと言う論文は沢山見た
それに反論する論文もかなり読んだ

よく探せば似たような議論は過去に何度もあった

個人的には日本語はプログラミングに向いてないと考えている
ぴゅーたの頃からやりづらかった
なでしこはピンと来ない
HSPも変数は日本語が使える
UWSCも使えた

新入社員にC#でクラス宣言作らせたら
日本語のクラス作られた事があって
流石に勘弁してくれと思った

英語が話せない人は居る
彼らにとっては日本語であってほしいのかも?

だけど、英語圏の検索もしなければならないし
出てきた内容をいちいち日本語に翻訳しないと読めないと言うのは、時間がかかりすぎてはないのか?

本人が英語を堪能になれば良いだけのことなのだが、、、

そういえば、外資系で5年も勤めていて一つも英語が上手くならない人がいた

ウエンツ氏も家族に英語話者がいるにも関わらず話せないと言う

一体どうなっているのだろうか

もしそう言う人がプログラムに興味を持ち
日本語で組みたいと思うのなら
自分で作るしかない

コード中に日本語での変数宣言やクラス宣言などが出来る言語は、前述の通り多数あるが、それらでは無いのだろう

Cのマクロでお嬢様言葉によるプログラミングを可能にしたと言う記事も見たが、それでもないのだろう

第五世代コンピュータの頃にもてはやされたPrologはどうだろうか

述語論理でコーディング出来るのはかなり面白い発想だと思うのだが

今のプログラミングスタイルの言語では
日本語の有利性を活かしきれない

自然言語でプログラミング出来る時代が来れば
日本語だの英語だのは関係なくなる気もする

その時代になれば
動きに文句つけるだけで
お望みの入出力が得られるようになるだろう

そう言う時代が来ることは大歓迎だ

日本語で組みたいと言う前に
完成系をイメージして欲しい

「日本人だから日本語は読めます」
  と言うだけでは

プログラミング言語を日本語にする理由として
あまりに安易だ

それと言語を作るのは結構センスが要る

わたしはPerl6を認めない
Perlの生みの親が作ったのだとしても認めない

Rubyも認めない
あんな半年後に自分でも読めなくなる言語
作ってほしくはなかった

プログラミング言語というのは
単純な予約語の組み合わせだけで
誰が組んでも同じ仕上がりになってくれないと
メンテナンス出来ない

そういう意味で
Pythonが使われるのは理解できる

Luaのように簡単な言語でも動くものは作れるという実験も理解できる

単純さを突き詰めるとニーモニックになるし
複雑さを突き詰めると日本語プログラミング言語になるのかもしれない

国の言語によらない書き方の方が便利なので
結局落とし所は既存プログラミング言語なのだ

ここの欄は電話番号です、こちらは郵便番号ですと日本語で書いたら、そういう機能が実装されるというのなら、まぁ、アリかも?

HTMLとか書かないで、以下の項目について入力欄を用意して、格好よくバランスよくレイアウトして、ボタンを押したらサーバにJSONで送信するみたいな仕様書にもならない戯言からよろしくやってくれるなら大歓迎する

正直わたしはHTMLのようなタグで書かないとブラウザが表示してくれない点について疑問に思っている
YMLで書けばもっと短くなるし
JSONで書けばそのままJavaScriptでも扱いやすくなる

動的にJSONからHTMLを作り上げるJavaScriptなんかどなたも書けるだろう

HTMLじゃなくてTeXにしてくれと思ったこともある

HTMLもオワコンになる日は来ると思っている

脱線したが、どこまで楽ができるフレームワークがあるのかと言う議論の方が、言語の種類に関する議論よりも有意義だ

2023年9月7日木曜日

ラズパイ

ラズパイを6台持ってる事を自慢げにラズパイOSを語ろうとする人が居るのだが

一般のご家庭ではラズパイ6台くらい普通に持ってるだろ?

うちでも録画マシン、再生マシン、開発用、3Dプリンタで常時ラズパイ4が4台動いてる

3Dプリンタ以外の3台は電源つけっぱなしです

ラズパイ4の前は同じ目的でラズパイ1から3までずっと使い続けてきてるのだから、
探したら沢山出てきます

それにOSなんて、サーバOSに決まってるだろ
デスクトップとして使うなよ
選択肢なんて他にありません
アホかと思った
デスクトップ使うなら普通にPC使いましょう

ラズパイに入れられる軽量OSとかの記事
マヂうざいので書くな
書くならK8Sの記事にしとけ
K8S で何やるか知らんけど、、、



2023年9月6日水曜日

Java BigDecimal CompareTo

こんな感じで結果を見てみる

        BigDecimal aa;
        BigDecimal bb;
        aa = new BigDecimal(100);
        bb = new BigDecimal(100.0);
        System.out.println("aa.compareTo(bb):" + aa.compareTo(bb));
        aa = new BigDecimal("100");
        bb = new BigDecimal("100.0");
        System.out.println("aa.compareTo(bb):" + aa.compareTo(bb));

まぁ予想通りだとは思うが

こんな感じになる

aa.compareTo(bb):0 aa.compareTo(bb):0

値でも文字でも小数点あろうとなかろうと、

等しかったら結果はゼロになります

こういう点でBigDecimalは便利


なんでこんな分かり切ったことを書いているかと言うと、

あるサイトで、JavaのBigDecimalのCompareToの結果、

等しかったらTrueになると書かれていたのと、

そのサイトの主が関西で140-170/80~120万(140から170時間、それ以下は減額、それ以上は増額、単価80~120万て意味でしょうね?)で探してると書かれていたので、

あんたにそんな価値ないよ、

せいぜい新人レベルよ?(50~60じゃないの?)

と思って書く気になった次第であります


2023年9月2日土曜日

Ubuntu Serverのアップグレード

サーバーバージョンのUbuntuの場合、以下でOS更新ができるらしい
sudo do-release-upgrade
へー知らんかった

だが、これ打ち込むとすごく脅される

Reading cache

Checking package manager

Continue running under SSH?

This session appears to be running under ssh. It is not recommended
to perform a upgrade over ssh currently because in case of failure it
is harder to recover.

If you continue, an additional ssh daemon will be started at port
'1022'.
Do you want to continue?

Continue [yN] Y

Starting additional sshd

To make recovery in case of failure easier, an additional sshd will
be started on port '1022'. If anything goes wrong with the running
ssh you can still connect to the additional one.
If you run a firewall, you may need to temporarily open this port. As
this is potentially dangerous it's not done automatically. You can
open the port with e.g.:
'iptables -I INPUT -p tcp --dport 1022 -j ACCEPT'

To continue please press [ENTER]

たしかにSSHでこれやるのは超危険
でも、とりあえずEnterしてみる

この後、あれこれダウンロードしたりチェックしたりして、その後さらに聞かれる

Do you want to start the upgrade?


7 packages are going to be removed. 264 new packages are going to be
installed. 1112 packages are going to be upgraded.

You have to download a total of 820 M. This download will take about
5 minutes with your connection.

Installing the upgrade can take several hours. Once the download has
finished, the process cannot be canceled.

Continue [yN]  Details [d]

yで継続

まだ聞かれる・・・
そりゃサービスの更新くらいありますよね


YESで継続

さらに聞いてくる


んなの、別にいいよ、新しいの入れる

さらに聞かれる


わからんけど、新しくします

minidlnaも聞かれた


デフォルトでKeepでいいです

なんか消すらしい


yで継続


はいはい、Abortで、、、え?これ、YESなの?
(YESが選ばれてるのだからYESなのだろう)

最後に再起動を促される


さて・・・起動するだろうか?

あれ???
sshでつながらない、refuseされた

しかたないので、モニターとキーボード付けて起動してみたところ・・・
Emergency Mode ?
Give root password for maintenanceとか出てくるんですけど・・・
パスワード入れて、メンテナンスモードになり、とりあえずfstabでも見てみる

vi /etc/fstab
あ、UUID指定してマウントしてる・・・
今外付けのドライブ外してるんだった

とりあえず、先頭に#付けてコメントアウトしexit(exitすると再起動になる)
起動してくれました・・・

一瞬焦る・・・
それにしても、fstabは毎回ハマるんで、自分もそろそろ脳みそのアップデートがしたい