ひとしれずひっそり

主にソフトに関することをメモしていきます。過程をそのまま書いていたりするので間違いが含まれます。鵜呑みしない様に。

M5でmruby/c (2)

前回できたlibmrubyc.aをlibディレクトリーに置いてみるるが全く無視されている様だ。 それではとダウンロードしたmrubycディレクトリーを丸ごとlibディレクトリーに置いてみる。 エラーは出ているがmrubycのMakefileを読み込んでうまい具合にやろうとしてい…

onChange に気をつけろ(onChangeだけじゃないけどな)

SwiftUIで onChange を使ったらハングアップしてしばらくしてからクラッシュする現象が出た。 なんかViewが再帰的に呼び出されている様でクラッシュに至る様だ。 ストップボタンもしばらく受け付けてくれない様な状況で、クラッシュするのを待つだけしか手が…

M5でmruby/c (1)

M5やmicrobitでmrubyやmruby/cが動かせるが platformio で構築できないかトライしてみる。 通常Arduinoフレームワークを選択するが、Espressif IoT Development Framework を使うとなんかできないか試してみる。 まずはmruby/cから Githubからダウンロード g…

M5Unifiedで機種(ボード)判定

IoT

M5Unifiedを使用すると同じバイナリーで様々なM5の機種に対応ができるとTwitterとかで見たことがある。 内部で判定している場所があるはずなので探ってみる。 M5Unified.hpp内で _board が定義されていてここにデバイスに合わせて設定されるっぽい。 M5Unifi…

M5AtomS3 の IR (2)

IoT

前回IRの受信でソニーテレビの信号を確認したので、送信してみる。 IRGCSendDemoで簡単にできることが分かったので、 github.com M5AtomS3ではG4がIRに繋がっていて、例の通りで動作できる。 必要な箇所のみにしたらこんなに簡単になった。 NECの場合をコメ…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(8)

10:50まで進んだ。 電池を繋いで動作確認する箇所があったが、動かない。 前回動かない気がしたが、ゼンマイ部が機能すると動くんじゃないかという期待はしていたが、全然ダメだった。 バラして確認して行ったらピンの長さや押し込みが足りずギヤ同士が干渉…

Mermaid

Markdownでフローチャートやステート図、シーケンス図など記述できるmermaid書式についていつも検索してしまうので、リンクを記載しておく。 mermaid.js.org

M5AtomS3 の IR (1)

IoT

M5AtomS3にIRが付いている。 M5StickCにも付いていたが、試したことがなかった。 この記事を頼りに進める。 lang-ship.com 送信するにもコードがわからないことには始まらない。 手元にセンサーキットがあったのでそれを利用する。 osoyoo.com 使ったことが…

MQTT

IoT

IoTでよくMQTTが使われているがまだ試したことがない。 こちらを参考にMosquittoを試してみる。 developer.mamezou-tech.com Macなのでインストールはbrewを使う。 % brew install mosquitto % brew install mosquitto-clients mosquittoはブローカーと呼ば…

M5AtomS3が届いた

IoT

最初に入っているのはこれかな? github.com platformioで試せそう。 環境のダウンロードに時間がかかかったがコンパイルできた。 最初から入っているのとは違った。 前回M5StampS3で色々試したので、platformio.iniファイルは参考になる。 https://github.c…

Protocolにoptionalなmethodを含めれる?

Objective-Cではoptionalなmethodを含めることができた。 Swiftではどうか? 検索すると @objc と optional を付けるとできる様だけど、StructureやEnumに適用できなくなるということらしい。 Swift流にするならoptionalの代わりにextensionでデフォルトの実…

ファイルのインポートやURL Schemeの処理は onOpenURL を使用する

SwiftUIの前は、ファイルのインポートやURL Schemeで呼び出される際にAppDelegateやSceneDelegateでコールバックが行われていた。 SwiftUIでもUIApplicationDelegateAdaptorでAppDelegateと同じ様なことができる。 struct MyApp: App { @UIApplicationDelega…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(7)

9:20まで進んだ。

Structureは継承できない

オブジェクトのシリアライズでStructureを定義するとjsonなどに変換しやすくなる。 既存ソフトの置換えをしていて次の様な流れで処理しようとしている。 Export Object(Class) -> Struct -> JSON Import JSON -> Struct -> Object(Class) Classは継承したも…

willSave()はsetPrimitiveValue(:forKey)を使え

Core Dataを使っていて保存前に作成時刻や更新時刻を記録したい時にwillSaveのタイミングで記録できる。 developer.apple.com とりあえずカスタムクラスを作成して、willSaveで普通にプロパティで設定してみる。 import Foundation import CoreData @objc(It…

余白を押した時に反応させる場合はcontentShapeを使う

ListやFromを使用した時のCellにTextを使ったとして、表示される文字を押すと反応するが、余白を押すと反応しない。 contentShape()を使用すると余白にも反応する。 毎回忘れて検索するので、書いておく。 struct ContentView: View { @State var showingAle…

M5Stamp S3 (3) Lチカ

IoT

M5Stamp S3 でLチカをしてみる。 M5Unifiedで使ったのにちょっと手を加えただけで動いた。 katsuyoshi.hatenadiary.com LEDはM5Stamp picoのソフトほぼそのままで動いた。 そのままで動いたということはRGBではなくGRBの順になっている様だ。 gist.github.co…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(6)

暫く放置していたけど少しずつ進めないとと思って少し進めた。 組み立てはこちらを見て進める。 www.youtube.com 電源ソケットのケーブルが短かった。 思わぬハンダ付け作業が入ってしまいゼンマイユニットの固定までで終えた。 次回は動画の 2:15 くらいか…

M5Stamp S3 (2)

IoT

ハード的な仕様はこちらから辿れる。 github.com M5Stamp picoの置き換えを考えているので比較してみる。 公式サイトから引用 S3の方はハーフピッチになっていてI/Oが沢山あるが、付属のピンヘッダー(2.54 mmピッチ)で使える部分で比較する。 左側、GROVE PI…

M5Stamp S3 (1)

IoT

M5Stamp S3が届いた。 M5Stamp picoの置換えとして捉えているがI/Oが倍くらいに増えてるのでかなりのことができそう。 裏にはLCD用の端子もあり盛りだくさん。 PlatformIO PlatformIOでビルドしようとしたらESP32じゃないよといわれた。 This chip is ESP32-…

setPrimitiveValue(_:forKey:)でhasChangesにならない

CoreDataでdynamic propetyが作られる。 @NSManaged public var name: String? 素のままではなく加工して使いたい場合にdynamic propetyの代わりにprimitiveValueやsetPrimitiveValueを使う。 @objc public var name: String { get { return primitiveValue(…

TextFieldでOptional値を扱う場合の改善

前に書いたTextFieldでOptional値を扱う場合にView内の@State属性を付けたメンバー変数に一旦渡して処理する方法を試した。 メンバー変数に値を渡すタイミングとしてonAppear()を使っていた。 TextField - ひとしれずひっそり onAppear()は描画時に1回呼ばれ…

UndoManagerの実装

ViewにToggle Swithを置いてOn/Offさせ、その操作のUndo/Redoを試す。 変更を通知できる様にObservableObjectをアダプトする。 objectWillChangeというプロパティが使える様になり、変更前にsend()を送ることでViewに更新が必要な事を伝えることができる。 …

SW_CPU_RESETがかかる

IoT

M5Stamp picoでデータを取っている装置のソフトを作り直して、どうも挙動が変なので調べてみる。 通常DEEPSLEEP_RESETで立ち上がってくるのが、 rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 188777542, SPIWP:0xee clk_drv:0x00,…

オブジェクトからクラス名を取得するやクラス名からオブジェクトを生成

現時点でSwift流のやり方は分かってない。 従来からあるNSClassFromString()、NSStringFromClass()を使う。 オブジェクトからクラス名を取得 class A {} NSStringFromClass(A.self) // -> "__lldb_expr_13.A" 空間名(という表現でいい?)がAの前につく様だ。…

static property のoverride

Swiftでクラスに属するpropertyやmethodはstaticキーワードで定義するが、staticはオーバーライドできない。 こちらを参照するとstaticの代わりにclassキーワードを使ってcomputedにするとオーバーライドできる様だ。 software.small-desk.com class A { cla…

1.9インチ 91セグメント I2C電子ペーパモジュール(7)

IoT

e-Paperモジュールでマイナス表示できないため0℃にクリップしていたが、Ambientへの記録もクリップされてしまったので修正。 それと測定中はM5Stamp picoのLEDを表示させる様にした。 よく考えたらマイナス表記もできるので対応させた。 1しか表示できないと…

Navigation Viewで子Viewから左上ボタンで戻る時に何かさせたい時

こちらに書かれていた。 stackoverflow.com struct MyView: View { @Environment(\.isPresented) var isPresented var body: some View { Rectangle() .onChange(of: isPresented) { newValue in if !newValue { print("detail view is dismissed") } } } }

The Basics

Swiftで8進数ってなんと表現する?と思って引っかかったサイト。 docs.swift.org 今まで他人のBlogやコードでSwiftをかじってきて何となくの理解だったのがここを読んで知らないことだらけと気づいた。 今後少しずつ読み進めていこう。 Taplsは知らなかった…

3軸トゥールビヨンの置き時計【3Dプリント用STLデータ】購入した(5)

印刷がやっと終わった。 明日から組み立てよう。 なかなか時間が取れない。