ソフトウェア

  • iCalendar .ics ファイルを生成するWebAPPの作成
    iCalendar .ics ファイルを生成するWebAPPの作成 カレンダーへ会社の休日をまとめて登録したくて.icsファイルジェネレータを作成した。 Sample Site さくらインターネット・レンタルサーバスタンダードプランへ実装したcgiを使用した作例。 https://yanmos.jpn.org/makeics/makeics.html 社内向けはfastAPIで実装、社外向けはpython cgiで実装した。 下記のようなcsvファイルを用意する。1行目に題目を記載し、2行目以降に日付を羅列する。 eg. 日本の正月 Input file: input.csv 正月 2024/1/1 2024/1/2 2024/1/3 Output file: output.ics BEGIN:VCALENDAR VERSION:2.0 PRODID:-//hacksw/handcal//NONSGML v1.0//EN CALSCALE:GREGORIAN METHOD:PUBLISH X-WR-CALNAME:Sample BEGIN:VEVENT SUMMARY:正月 DTSTART;VALUE=DATE:20240101 DTEND;VALUE=DATE:20240102 UID:785ba0e4-8c91-4fcc-ad86-39a9ffe29296 END:VEVENT BEGIN:VEVENT SUMMARY:正月 DTSTART;VALUE=DATE:20240102 DTEND;VALUE=DATE:20240103 UID:ed2014cf-ccdb-4191-a86c-b2149de4ca74 END:VEVENT BEGIN:VEVENT SUMMARY:正月 DTSTART;VALUE=DATE:20240103 DTEND;VALUE=DATE:20240104 UID:88a2fe72-c0e4-47a8-9539-d0e7f32c9292 END:VEVENT END:VCALENDAR Structure 処理の構成は下図の通り。 flowchart LR infile((.csv file)) outfile((.ics file)) cgi html html-->cgi-->outfile infile-->cgi 使用ライブラリ UIkit・・・Graphical User Interface iCalendar・・・python calendar module Source ...
  • Raspberry PiでADS1115を使う
    Raspberry PiでADS1115を使う I2CアドレスはADDR端子の配線で設定する。 ADS1115 I2C Address ADDR pin connection I2C address GND 0x48 VDD 0x49 SDA 0x4A SCL 0x4B 使用したI2Cチャネルは1。 ADS1115 Register Pointer Description 0x00 Conversion Register : AD変換結果 0x01 Config Register : 設定 ADS1115のレジスタデータはBig Endianだが、pigpio の I2CライブラリはSMBusベースなので Little Endianである。よって上位バイトと下位バイトを入れ替える必要がある。 Config Register 0x01 Bit Field Set Description 15 OS 0 No efect 14:12 MUX 0b100 Input single end AIN0 11:9 PGA[2:0: 0b001 Full Scale 4.096V 8 MODE 0 Continuous-conversion mode 7:5 DR 0b010 Speed 32 Sample/s 4 COMP_MODE 0 Normal ...
  • コンター図をエクセルファイルへ追加する
    Draw a contor graph into the .xlsx file 2軸で定義された粗めのデータ配列から補間演算をしてコンター図を作成する。UIはWebで。プラットフォームはstreamlitを利用。 作成・設置例 https://yanmos-playstreamlit-drawcontour-c3kgvj.streamlit.app Data flow データフローを下図に示す。contour_template.xlsx にデータを登録する。それをweb appでアップロードし計算後に結果ファイルをダウンロードする。結果ファイルにはコンター図が挿入される。 graph LR indata temp src web[Web<br>Interpolating &<br>drawing ...
  • Raspberry Pi Pico – Picoprobe
    Raspberry Pi Pico w/picoprobe 目的 Raspberry Pi Picoのソフトウェアを開発するため書き込みとデバッグを行う環境をセットアップする。HostはM1 Mac。MacからPicoprobeへはUSBで接続し、PicoprobeからターゲットpicoへはSWDで接続する。 構成 flowchart LR subgraph M1 Mac w/vscode gdb ...
  • 自家用車の燃費推移の周波数分析
    自家用車の燃費推移の周波数分析 一体何を言っているのだ。と思われそうだが、ガソリンの給油のたびに燃費を計算して記録していたので、そのデータをフーリエ変換したくなったのだ。 諸元 対象車 トヨタ アクア 2013 集計期間 2013 〜 2022 燃費計算 満タン法 備考 通勤に使用 毎日往復50km 結果 上のグラフは横軸は経過日数で、燃費の推移である。 下のグラフは横軸は周期である。365日(1年)と180日(半年)付近にピークがある。おそらく夏はエアコン、冬は暖房の使用で燃費が落ちるのだろう。 計算方法 燃費データをcsvフォーマットで作成する。1列目に経過日数、2列目を燃費とする。燃費はガソリンを満タン補給する度に走行距離と給油量から算出した。 燃費データcsvファイル例 18,28.122 34,21.676 54,27.475 73,21.922 89,22.234 107,23.484 ~~~~~~~~ 3221,30.254 3238,29.365 3257,27.977 3280,30.023 jupyter で作成し動作確認したソースコード #!/usr/bin/env python # coding: utf-8 # In: import numpy as np import matplotlib.pyplot as plt from scipy import interpolate from scipy import fftpack # In: # csvファイルの読み込み filename = 'fuelconsumption.csv' data = np.loadtxt(filename,delimiter=",",skiprows=1, dtype="float") ds = data fc = ...
  • 単語カードアプリの作成
    Flashcard App フラッシュカードアプリを作成しました。英単語などを覚えるツールとしてレンタルサーバで動作するWebアプリです。私はiPhoneからアクセスして勉強しています。単語登録はMySQLへ直接登録する必要があります。 動作サンプル たべっ子英単語 Screen shots 利用方法は橙色の面に表示された問題を見て回答をイメージします。そしてタップすると裏側の緑色の面が表示されるので答え合わせをします。さらにタップすると次の問題が橙色の面に表示されます。設定は左上のメニューをタップして出題の種類を選択します。 Condition 動作環境 項目 内容 サーバ さくらインターネット 契約プラン レンタルサーバ スタンダード ライブラリ jquery データベース MySQL インターフェース cgi cgi処理 python3.7 ファイル構成 Filename 内容 flashcard.html メインページ flashcard.js jqueryでユーザーインターフェース処理 flashcard.cgi pythonでデータベース処理 flashcard.css 装飾 データベース データベースのレコード定義はシンプルに下記としました。 CREATE TABLE IF NOT EXISTS `FlashCard` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `side_a` TEXT, `side_b` TEXT, ...
  • Benchmark M1 processor
    Benchmark 自分が管理しているPCで計算処理のベンチマークを実施した。実行サンプルはnumpyで作成した4.5M要素の演算と探索を行いコンター図を出力するプログラムである。 1位 MacBook Pro 2021 Apple M1 Pro RAM 32GB ARM64 計算時間 2 min 56 s 2位 MacBook Pro 2021 Apple M1 Pro RAM 32GB Rosetta 計算時間 4 min 46 s 3位 Windows10 desktop 2020 Xeon 4GHz RAM 32GB 計算時間 5 min 11 s 4位 Windows10 note 2020 Core i5 ...
  • Raspberry Pi Cmd Launcher
    Raspberry Pi Cmd Launcher Raspberry Piにキャラクタ液晶とプッシュスイッチを組み合わせてランチャーを製作する。 スイッチは左ボタンと右ボタンとエンターボタンの3つとする。液晶に表示されたメニューから左右ボタンで希望のコマンドを選択しエンターボタンで実行する。ユーザフィードバックはピエゾ素子で音を発生。 Hardware 液晶はi2c接続の2行8桁のものを使用する。秋月電子で販売中のバスリピーター付きのLCD(AQM0802A)。 スイッチは小さなプッシュ型でエンターボタンは少し大きめのものを選んだ。家庭内在庫品だ。 graph LR subgraph Raspberry Pi i2c pwm ...
  • Raspberry Pi に Beep音を実装する
    Beep sound on Raspberry Pi ラズパイにBeep音を実装したい。起動完了やアラート発生時にピッ・プーーと鳴らすのだ。 Hardware Hardware PWMを利用した実装例です。 Schematic BOM Name Type Spec. Piezo sounder Murata PKM13EPYH4000-A0 Dia.13mm, t6.9mm, 30Vp-p max. Transister Rohm DTC143E NPN Digital Tr. Rb=4.7kΩ, Rbe=4.7kΩ Resister Carbon film 10kΩ 0.1W Software Hardware PWMを利用した実装例です。 Source code python3 PIGPIOモジュールを使用しました。beep(0) でピポッです。 これから動作確認します。(^^;) import pigpio BEEP_PORT = 13 BEEP_DUTY = 500000 pi = pigpio.pi() def beep(pattern_id=0): ...
  • LIFEGAME
    LIFEGAME Python, Numpy, Curses の組み合わせでライフゲームを製作した。練習問題ですね。 cursesでconsoleのwindowサイズを取得、それに合わせてnumpy.arrayを作成しbufferとする。初期画面はnumpyのrandomで生成、世代更新はnumpyのsumを利用した。画面更新はbufferをスキャンして1つ1つ書き換え。ここは改良の余地がありそう。 #!/usr/bin/env python3 import numpy as np import curses as cs import time class lifegame: def __init__(self, ny, nx): self.field = np.zeros([ny, ...
  • リアルタイムふうOS キャラクタ表示LCDドライバ
    RTF-OS LCD driver LCD初期化タスクとドライバタスクの初期化 #define N_LCD_MSG 32 /* LCDコマンドバッファのバイト数 */ flag_type *flag_lcd_init; ...
  • リアルタイムふうOS キャラクタ表示LCDドライバ
    RTF-OS LCD driver MSC Real Time Foo OS を使用したLCDドライバの作例。ドライバ本体タスクと初期化シーケンスを実行するタスクの2つのタスクで構成する。利用するタスク(メインタスクと表記)から初期化タスクを呼び出すことで起動する。lcd_mainタスクは初期化が完了すると不要となる。 API 名称 処理内容 init_lcd LCD関連タスク、イベントフラグ、メールボックスの初期化 lcd_clear 表示をクリアする lcd_home カーソルをホームポジションに移動する lcd_print_str カーソル位置に文字列を表示する lcd_print_dec4s 16ビット符号付きバイナリデータを4桁の十進数とで表示する。負数は"-"を付加。 lcd_print_dec4 16ビットバイナリデータを4桁の十進数で表示する lcd_print_dec3 8ビットバイナリデータを3桁の十進数で表示する lcd_print_dec2 8ビットバイナリデータを2桁の十進数で表示する lcd_print_dec1 8ビットバイナリデータを1桁の十進数で表示する lcd_set_pos カーソルをx,y座標に移動する print カーソル位置に文字列を表示する。失敗なら再試行、成功なら状態遷移する。 locate カーソルをx,y座標に移動する。失敗なら再試行、成功なら状態遷移する。 home カーソルをホームポジションに移動する。失敗なら再試行、成功なら状態遷移する。 clear 表示をクリアする。失敗なら再試行、成功なら状態遷移する。
  • リアルタイムふうOS 全体の構成とAPI
    全体の構成とAPI リアルタイムOSの勉強のために作成したフレームワークです。タスクが移り行く様はなかなかおもしろかった。 Over view 全体の構成図を下記に示す。1つのモジュールは1つの初期化ルーチンと1つ以上のタスクを持つ。各タスクの同期はOSが仲介する。 API タスク制御と時間管理に関するAPI 名称 処理内容 init_os OSの初期化 task_main メインルーチン無限ループ create_tcb ユーザタスクを登録するTCBを作成 start_task タスクを実行待ちリストに登録する start_task_i 割込みルーチン用のstart_task処理 exit_task タスクを終了するTCBを解放 exit_task_i 割込みルーチン用のexit_task処理 get_trg 状態遷移した理由を取得 delay_task 実行を指定時間だけ中断する set_timeout 実行を指定時間だけ中断する(delay_taskと同じ) clear_timeout 中断後の再開をキャンセルする timer_1ms_int 1ms周期タイマ割込みで行う処理(タイムアウト判定) slice_task 実行を中断しCPUを解放する set_next_state 次の状態遷移変数値を設定 イベントフラグに関するAPI 名称 処理内容 create_flag イベントフラグFLAGを作成 set_flag イベントが発生する(フラグがTRUE)まで待つ set_flag_i イベントを発生(フラグをTRUEに設定) clear_flag 割込みルーチン用のset_flag処理 clear_flag_i イベントを消去(フラグをFALSEに設定) wait_flag 割込みルーチン用のclear_flag処理 セマフォに関するAPI 名称 処理内容 create_sem セマフォSEMを作成 signal_sem セマフォwait動作(リソースが空くまで待つ) wait_sem セマフォにsignal動作(リソースを1つ解放する) メールボックスに関するAPI 名称 処理内容 create_mbx メールボックスMBXを作成 send_msg メールボックスにメッセージが受信されるまで待つ send_msg_i メールボックスにメッセージを送信 wait_msg 割込みルーチン用のsend_msg処理 get_msg メッセージを取得 get_msglen メッセージの長さを取得
  • リアルタイムふうOS データ構造
    Data structure Task Control Block: TCB struct st_tcb { struct st_tcb *link; struct st_tcb *back_link; void (*entry)( ...
  • リアルタイムふうOS 時間管理
    Time management タイマ関連処理 タイムアウト待ち登録:TimerQへ登録 時間経過待ちタスクのリストへ登録する。待ち時間の短い順でソートされる。 void link_timer_q( tcb_type *tcb, uint16 time ) { uint16 sum_time, time_z1; tcb_type *scan; ...
  • リアルタイムふうOS タスクの書式
    How to write a task Example of the task rouchine Module initialize tcb_type *tcb_sample1; tcb_type *tcb_sample2; flag_type *flag; void init_sample( void ) /* 初期化ルーチン */ { ...
  • リアルタイムふうOS 初期化とメインルーチン
    Initialization and Mainrouchine General flowchart OS Initialization void init_os( void ) { que_type *que; que = &TimerQ; TimerQ.link = (tcb_type *)que; ...