- 〇太宰治『人間失格』人間として生きられない人間の悲惨な生涯
- 〇ヨーハン・ヴォルフガング・ゲーテ『若きウェルテルの悩み』善女の顔をした悪女に殉ずる青年の悲劇
- ▽ルイス・キャロル『不思議の国のアリス』 少女というトリックスターの異界めぐり 青空電子あり、完遂?
- ▽沼正三『家畜人ヤプー』マゾヒストの奇想が構築した倒錯のユートピア 有料電子あり 県で完遂?
- 〇安部公房『砂の女』 砂の世界に囚われた失踪者の新しい日常
- 〇フランツ・カフカ『審判』自分の知らない罪によって裁かれる恐怖
- ▽埴谷雄高『死霊』嗜好の実験室で培養された観念小説の極北 第一巻で挫折。。。
- ▽夢野久作『ドグラ・マグラ』読者の現実感覚を崩壊させる記憶の迷宮 世界観を知る意味で代替『瓶詰地獄』を読んだ
- 〇アルチュール・ランボー『地獄の季節』 鮮烈なイメージが炸裂する天才の散文詩
- 〇フリードリッヒ・ニーチェ『ツァラストゥストラ』 読者の魂を焼き尽くす神なき世界の黙示録
- 〇三島由紀夫『金閣寺』 美を滅ぼすことに憑かれた青年僧の告白
- 〇大岡昇平『野火』 戦争という狂気が生み出す人肉食の悪夢
- 〇ウィリアム・フォークナー『サンクチュアリ』 「聖域」で繰り広げられる変質者の陰惨な暴力
- 〇中上健次『千年の愉楽』 「路地」に生まれた若者たちの沸騰する生と死
- 〇川端康成『眠れる美女』死臭漂う宿で老人たちが営む性の秘儀
- 〇ウラジミール・ナボコフ『ロリータ』中年男を「萌え」させるニンフェットの魔力
- 〇江戸川乱歩『芋虫』人間が人間であることの極限に触れた短篇
- ジョルジュ・バタイユ『眼球譚(がんきゅうたん)』読者に嫌悪と嘔吐を催させる究極の背徳
- @永山則夫『無知の涙』 獄中で自我に目覚めた連続射殺魔の手記 有料電子 県立在庫
- @アドルフ・ヒトラー『わが闘争』 世界を破滅へと導いた反ユダヤ思想のバイブル300頁 有料電子 県立在庫
- @マルキ・ド・サド『悪徳の栄え』残虐行為の快楽を称揚する悪の哲学 有料電子 県立在庫
- @ウィリアム・バロウズ『裸のランチ』 麻薬常習者の錯乱が生み出すおぞましい幻覚 手元あり
- @河野多恵子『幼児狩り』幼い男児を物色する女の歪んだ欲望 『ミイラ取り猟奇譚』 手元あり
- @ジャン・ジュネ『ブレストの乱暴者』男色泥棒作家 代替『泥棒日記』 手元あり
- @ロートレアモン『マルドロールの歌』 野生の言語が繰り広げる荒唐無稽な幻想文学 手元あり
- @大江健三郎『われらの時代』 疾走する文体で読者を揺さぶる挑発的作品 手元あり
- @ヘンリー・ミラー『北回帰線』性の躍動と欲望の噴出を歌い上げる言葉の奔流! 手元あり
- @ライナー・マリア・リルケ『マルテの手記』 パリを彷徨する孤独な青年の心象風景 キンドルで読書中!
- @原口統三『二十歳のエチュード』少年少女の夭折(ようせつ)願望を刺激する若き魂の記録 キンドルで読書中!
- @谷崎潤一郎『鍵・瘋癲(ふうてん)老人日記』 観念の世界で欲望を駆り立てる男たちの痴態 Kobo読書中
- @島尾敏雄『死の棘(とげ)』 夫婦の愛憎の極限を描く凄惨な私小説 読書中
- @フョードル・ドストエフスキー『地下室の手記』 自意識の病を分析する「ニート」の独白 電子もあるが古典新訳で読書中
- @ジャン=ジャック・ルソー『孤独な散歩者の夢想』生と死の境界線を消滅させる甘美な思索の書 岩波ワイドで読書中
- @トーマス・マン『ヴェニスに死す』少年の妖しい美に魅せられた中年作家の死 古典新訳で読書中
- 中国がらみ @エン・レンカ 『四書』 1956年の百花斉放百家争鳴、その後の大躍進政策を風刺するディストピア、一時毛沢東は失脚するも1966年に文化大革命で復権、1977年鄧小平の完全復権にて1989年に天安門事件、2020年に習近平の香港領土化
- 中国がらみ @高行健 『ある男の聖書』 文革で紅衛兵だったころの自伝
- そのほか 田舎司祭の日記、ミドルマーチ、エジプト、徒然草、テス、マンスフィールド
- 購入予定 ラクダのシャンツ、寒い夜、
2025年12月31日水曜日
毒書案内:読んではいけない35冊+中国2冊
2025年12月26日金曜日
PICO Wで音出し cf 加速度・角速度は未はんだ(倒立振り子用)メムマイク
mp3player,audio recorder,human voice synthesizerは成功ずみ,memsマイクは未踏、max98357は2個とも実施後にusb interfaceがあかんようになり再起動必要であきらめた
結局単純なドレミでOK牧場とした
from machine import Pin, PWM
import utime
# GP0をPWM出力に設定
buzzer = PWM(Pin(0))
# 音階と周波数の対応表 (Hz)
notes = {
'do': 262,
're': 294,
'mi': 330,
'fa': 349,
'so': 392,
'la': 440,
'si': 494,
'do2': 523
}
def play_tone(frequency, duration):
if frequency == 0:
buzzer.duty_u16(0) # 無音(休符)
else:
buzzer.freq(frequency) # 周波数を設定
buzzer.duty_u16(32768) # デューティ比50%で音を鳴らす
utime.sleep_ms(duration)
buzzer.duty_u16(0) # 音を止める
utime.sleep_ms(50) # 音の切れ目を作るための短い休止
# ドレミファソラシドを順番に鳴らす
scale = ['do', 're', 'mi', 'fa', 'so', 'la', 'si', 'do2']
for note in scale:
print(f"Playing: {note}")
play_tone(notes[note], 400) # 各音を400ms鳴らす
# プログラム終了時に確実に止める
buzzer.deinit()
ーーーーーーーーーちょうちょは以下のごとしーーーーーーーーーーーーーーーーーーーー
from machine import Pin, PWM
import utime
buzzer = PWM(Pin(0))
# ハ長調
notes = {
'C': 262,
'D': 294,
'E': 330,
'F': 349,
'G': 392,
'A': 440,
'C2': 523, # 高いド
'rest': 0
}
def play(f, t):
if f == 0:
buzzer.duty_u16(0)
else:
buzzer.freq(f)
buzzer.duty_u16(32768)
utime.sleep_ms(t)
buzzer.duty_u16(0)
utime.sleep_ms(40)
# 🦋 ちょうちょ ちょうちょ
melody = [
('G', 400), ('E', 400), ('E', 800),
('F', 400), ('D', 400), ('D', 800),
# なーのはに とーまれ
('C', 400), ('D', 400), ('E', 400), ('F', 400),
('G', 800),
('rest', 400)
]
for n, t in melody:
play(notes[n], t)
buzzer.deinit()
Pico W + MAX98357A(chatgpt) https://www.otosozai.com/se1_1.htmlよりステレオ音源とったが、、、
一度はうごいたがその後無音に。。。。製品が2個とも悪いのかも、あきらめた
**「ステレオ WAV でも再生できる」**ようにします。
やり方は ステレオ → モノラルにソフトで変換(L+R を平均)して I2S に流す方式です。
👉 MAX98357A が モノラル接続でも確実に鳴る一番安全な方法です。
方針(重要)
-
WAV が
-
モノラル → そのまま再生
-
ステレオ → L/R を平均してモノラル化して再生
-
-
対応フォーマット
-
PCM
-
16bit
-
mono / stereo 両対応
-
ステレオ対応版:WAV 再生コード(Pico W + MAX98357A)
from machine import Pin, I2S
import struct
# ==============================
# I2S ピン設定
# ==============================
BCLK_PIN = 10 # GP10
WS_PIN = 11 # GP11
DIN_PIN = 12 # GP12
WAV_FILE = "test.wav"
# ==============================
# WAV ヘッダ解析
# ==============================
def read_wav_header(f):
if f.read(4) != b'RIFF':
raise ValueError("RIFF形式ではありません")
f.read(4)
if f.read(4) != b'WAVE':
raise ValueError("WAVE形式ではありません")
# fmt チャンク探索
while True:
cid = f.read(4)
size = struct.unpack("<I", f.read(4))[0]
if cid == b'fmt ':
fmt = f.read(size)
break
else:
f.seek(size, 1)
audio_format, channels, sample_rate = struct.unpack("<HHI", fmt[:8])
bits = struct.unpack("<H", fmt[14:16])[0]
print("==== WAV 情報 ====")
print("チャンネル数 :", channels)
print("ビット深度 :", bits)
print("サンプル周波数:", sample_rate, "Hz")
if audio_format != 1:
raise ValueError("PCM形式のみ対応")
if bits != 16:
raise ValueError("16bitのみ対応")
if channels not in (1, 2):
raise ValueError("mono / stereo のみ対応")
# data チャンク探索
while True:
cid = f.read(4)
size = struct.unpack("<I", f.read(4))[0]
if cid == b'data':
return sample_rate, channels, size
else:
f.seek(size, 1)
# ==============================
# ステレオ → モノラル変換
# ==============================
def stereo_to_mono(data):
out = bytearray(len(data) // 2)
for i in range(0, len(data), 4):
l = struct.unpack_from("<h", data, i)[0]
r = struct.unpack_from("<h", data, i + 2)[0]
m = (l + r) // 2
struct.pack_into("<h", out, i // 2, m)
return out
# ==============================
# WAV 再生
# ==============================
with open(WAV_FILE, "rb") as f:
rate, channels, data_size = read_wav_header(f)
audio = I2S(
0,
sck=Pin(BCLK_PIN),
ws=Pin(WS_PIN),
sd=Pin(DIN_PIN),
mode=I2S.TX,
bits=16,
format=I2S.MONO,
rate=rate,
ibuf=40000
)
print("▶ 再生開始")
BUF_SIZE = 1024 * (2 if channels == 2 else 1)
remaining = data_size
while remaining > 0:
raw = f.read(min(BUF_SIZE, remaining))
if not raw:
break
if channels == 2:
raw = stereo_to_mono(raw)
audio.write(raw)
remaining -= len(raw)
audio.deinit()
print("■ 再生終了")-------------------------------------------------------------
2025年12月24日水曜日
TB6612使用 Dual DCモータードライブキット 秋月 (uno/pic)
akizukidenshi.com は、ピンの位置が微妙にずれているので要注意
真ん中の3本がgnd,stby,vccになっている stbyはポジティブにセットしておく方法とプログラムでセットするやり方がある、後者のほうがベターだが配線がめんどい 以後は前者
const int motorPWM = 3;
const int motorAin1 = 4;
const int motorAin2 = 5;
int motorSpeed = 100; // pwmのデューティ比で0~255で調整
void setup() {
// declare pin 9 to be an pwm output:
pinMode(motorPWM, OUTPUT);
pinMode(motorAin1, OUTPUT);
pinMode(motorAin2, OUTPUT);
}
void loop() {
analogWrite(motorPWM, motorSpeed);
digitalWrite(motorAin1, LOW);
digitalWrite(motorAin2, HIGH);
delay(3000);
digitalWrite(motorAin1, HIGH);
digitalWrite(motorAin2, LOW);
delay(3000);
}
2025年12月21日日曜日
pic16f18325 no-mcc aqm0802
http://machoto2.g2.xrea.com/page/P16F18325/P18325_M01.htm ばっちり動いた
main.c
/*********************************************************************
* データをLCDに表示する。 1MHz (内部クロック)
* RC5 SCL
* RC4 SDA
*
* PIC16F18325 MPLAB X IDE with XC8
* Copyright (c) 2017 iwamoto All Rights Reserved
* *******************************************************************/
#define _XTAL_FREQ 1000000
#include <xc.h>
#include <stdio.h>
#include "LCDi2c.h"
//******************* コンフィグレーション ****************************
#pragma config FEXTOSC = OFF,RSTOSC = HFINT1 // HFINTOSC (1MHz)
#pragma config CLKOUTEN = OFF,CSWEN = ON,FCMEN = OFF
#pragma config MCLRE = OFF,PWRTE = OFF,WDTE = OFF,LPBOREN = OFF
#pragma config BOREN = OFF,BORV = LOW,PPS1WAY = OFF,STVREN = ON
#pragma config DEBUG = OFF
#pragma config WRT = OFF,LVP = OFF,CP = OFF,CPD = OFF
// ******************* main ******************************************
void main() {
i2c_int();
LCD_int(); // LCDを初期化
printf("LCD Test");
LCD_posyx(1,1); // 下段にカーソル移動
printf("%04X",0x12AB); // 数値をHEX表示する
while(1);
}
LCDi2c.h
/* * File: LCDi2c.h * データをLCDに表示する。 * 秋月(ACM1602NI)I2C LCD表示器を使用 * 1MHz (内部クロック) * RC5 SCL * RC4 SDA * * PIC16F18325 MPLAB X IDE with XC8 * Copyright (c) 2017 iwamoto All Rights Reserved ** Author: ki * Created on October 21, 2017, 11:53 AM */ #ifndef _XTAL_FREQ #define _XTAL_FREQ 1000000 #endif //************************************************* // 調整用定数 //************************************************* #define CONTRAST 0x28 // for 3.3V // #define CONTRAST 0x18 // for 5.0V // プロトタイプ ******************************* void i2c_int(void); void i2cByteWrite(char, char, char); void i2cTxData(char); void LCD_dat(char); void LCD_cmd(char); void LCD_clr(void); void LCD_posyx(char,char); void LCD_int(void); void LCD_str(char *); void LCD_ROMstr(const char *);
LCDi2c.c
/* ************************************
* File: LCDi2c.c
* プログラム例
* int a = 1234;
* printf("%d %o %x\n", a, a, a);
* printf("%s %c\n", "abc", 'x');
* 結果 -------------------------------
* 1234 2322 4d2
* abc x
* *************************************/
#include <xc.h>
#include <stdio.h>
#include "LCDi2c.h"
//******************************************************
// LCD で printf関数が使用できるようにするため putch を設定する
//******************************************************
void putch(char data) {
LCD_dat(data); // LCD への一文字表示関数
}
//******************************************************
// I2C 関連 RC5 SCL, RC4 SDA
//******************************************************
void i2c_int(void){
TRISC4 = 1; // RC4を入力にする
TRISC5 = 1; // RC5を入力にする
ANSC4 = 0; // RC4をデジタルIO
ANSC5 = 0; // RC5をデジタルIO
ODCC4 = 1; // RC4をオープンドレイン
ODCC5 = 1; // RC5をオープンドレイン
LATC4 = 1; // RC4をオープンにする
LATC5 = 1; // RC5をオープンにする
WPUC4 = 1; // RC4弱プルアップ ON
WPUC5 = 1; // RC5弱プルアップ ON
RC4PPS = 25; // RC4をDAT出力に指定
RC5PPS = 24; // RC5をCLK出力に指定
SSP1DATPPS = 0x14; // RC4をDATに入力指定
SSP1CLKPPS = 0x15; // RC5をCLK入力に指定
// SSP1設定 ------------------------------------------
SSP1STAT = 0b10000000; // スルーレート制御はOff
SSP1ADD = 1; // クロック設定 125k@1MHz
SSP1CON1 = 0b00101000; // I2C Master modeにする
}
//-------- ByteI2C送信
void i2cByteWrite(char addr, char cont, char data){
SSP1CON2bits.SEN = 1; // Start condition 開始
while(SSP1CON2bits.SEN); // Start condition 確認
i2cTxData(addr); // アドレス送信
i2cTxData(cont); // 制御コード送信
i2cTxData(data); // データ送信
SSP1CON2bits.PEN = 1; // Stop condition 開始
while(SSP1CON2bits.PEN); // Stop condition 確認
}
//-------- Data送信
void i2cTxData(char data){
PIR1bits.SSP1IF = 0; // 終了フラグクリア
SSP1BUF = data; // データセット
while(!PIR1bits.SSP1IF); // 送信終了待ち
}
//********************************************************
// LCD 関連
//********************************************************
//-------- 1文字表示
void LCD_dat(char chr){
i2cByteWrite(0x7C, 0x40, chr);
__delay_us(50); // 50μsec
}
//-------- コマンド出力
void LCD_cmd(char cmd){
i2cByteWrite(0x7C, 0x00, cmd);
if(cmd & 0xFC) // 上位6ビットに1がある命令
__delay_us(50); // 50usec
else
__delay_ms(2); // 2msec ClearおよびHomeコマンド
}
//-------- 全消去
void LCD_clr(void){
LCD_cmd(0x01); //Clearコマンド出力
}
//-------- カーソル位置指定
void LCD_posyx(char ypos, char xpos){
unsigned char pcode;
switch(ypos & 0x03){
case 0: pcode=0x80;break;
case 1: pcode=0xC0;break;
}
LCD_cmd(pcode += xpos);
}
//-------- 初期化
void LCD_int(void){
__delay_ms(100);
LCD_cmd(0x38); // 8bit 2行 表示命令モード
LCD_cmd(0x39); // 8bit 2行 拡張命令モード
LCD_cmd(0x14); // OSC BIAS 設定1/5
// コントラスト設定
LCD_cmd(0x70 + (CONTRAST & 0x0F));
LCD_cmd(0x5C + (CONTRAST >> 4));
LCD_cmd(0x6B); // Ffollwer
__delay_ms(100);
__delay_ms(100);
LCD_cmd(0x38); // 表示命令モード
LCD_cmd(0x0C); // Display On
LCD_cmd(0x01); // Clear Display
}
//-------- 文字列出力
void LCD_str(char *str){
while(*str) //文字列の終わり(00)まで継続
LCD_dat(*str++); //文字出力しポインタ+1
}
//-------- Rom 文字列出力
void LCD_ROMstr(const char *str){
while(*str) //文字列の終わり(00)まで継続
LCD_dat(*str++); //文字出力しポインタ+1
}
2025年12月20日土曜日
HSPのhspext.asは超便利
#include "hspext.as"
com_port = 10 ; arduinoのシリアルモニタは使えなくなる
com_baud = "baud=9600 parity=N data=8 stop=1"
comopen com_port, com_baud
if stat != 0 : dialog "COMポートを開けませんでした。": end
mes "COM" + com_port + " を開きました。"
; --- 重要:Arduinoがリセットから立ち上がるのを待つ --- これがないと
ArduinoはPCから接続(comopen)された瞬間に再起動(リセット)がかかります。
mes "Arduinoの準備を待っています..."
wait 300 ; 3秒間待機(これがないと送信データが無視されます)
再起動中のArduinoはデータを受け取れないため、送信前に待ち時間を入れる必要があります。
; --- データの送信 ---
comput "Hello HSP3.7"
mes "データを送信しました。LEDが4秒間光るはずです。"
; 送信が物理的に完了するまで少し待ってから閉じる
wait 100
comclose
mes "ポートを閉じました。"
stop
----------------対応arduino code-----------------
2025年12月18日木曜日
aqm1602 on pic16f18857(gokan IOT pedia)
/***********IOT 3.2.1yori*******************************
* I2C接続のセンサとLCDを使う mccだけでOK すばらしい
* 温湿度、気圧の表示
*****************************************/
#include "mcc_generated_files/mcc.h"
#include "mcc_generated_files/examples/i2c1_master_example.h"
//#include "mcc_generated_files/weather.h"
// 変数定義
uint8_t Flag;
double temp, humi, pres;
char Line1[17], Line2[17]; // aqm1602は16x2 17は多すぎ
char Line1[]="0123456789012345";
char Line2[]="0000000000000000";
// 液晶表示器 コントラスト用定数
//#define CONTRAST 0x18 // for 5.0V
#define CONTRAST 0x25 // for 3.3V bme280併用時はこれで
// 関数プロト
void lcd_data(char data);
void lcd_cmd(char cmd);
void lcd_init(void);
void lcd_str(char * ptr);
/***** タイマ0割り込み処理関数******/
void TMR0_Process(void){
Flag = 1;
}
/***** メイン関数 ******/
void main(void)
{
SYSTEM_Initialize(); // システム初期化
TMR0_SetInterruptHandler(TMR0_Process);
INTERRUPT_GlobalInterruptEnable();
INTERRUPT_PeripheralInterruptEnable();
lcd_init(); // LCD初期化
/****** メインループ ************/
while (1)
{
if(Flag == 1){
Flag = 0;
/** センサデータ読み出し **/
//Weather_readSensors();
//temp = Weather_getTemperatureDegC();
// humi = Weather_getHumidityRH();
//pres = Weather_getPressureKPa() * 10;
// 表示データ編集
// sprintf(Line1, "T=%2.1fC H=%2.1f%%", temp, humi);
// sprintf(Line2, "P=%4.1f hPa", pres);
// LCD表示
lcd_cmd(0x80); // 1行目
lcd_str(Line1);
lcd_cmd(0xC0); // 2行目
lcd_str(Line2);
}
}
}
/****** 液晶表示器ライブラリ ***************/
/******************************
* 液晶へ1文字表示データ出力
*******************************/
void lcd_data(char data){
I2C1_Write1ByteRegister(0x3E, 0x40, data);
__delay_us(30); // 処理待ち遅延
}
/*******************************
* 液晶へ1コマンド出力
*******************************/
void lcd_cmd(char cmd){
I2C1_Write1ByteRegister(0x3E, 0x00, cmd);
/* ClearかHomeのとき長遅延 */
if((cmd == 0x01)||(cmd == 0x02))
__delay_ms(2); // 2msec待ち
else
__delay_us(30); // 30μsec待ち
}
/*****************************
* 液晶表示器 文字列表示関数
*****************************/
void lcd_str(char * ptr){
while(*ptr != 0) // 文字列最後まで
lcd_data(*ptr++); // 文字表示実行
}
/*******************************
* 液晶表示器 初期化関数
*******************************/
void lcd_init(void){
__delay_ms(150); // ハード初期化待ち
lcd_cmd(0x38); // 8bit 2line Normal mode
lcd_cmd(0x39); // 8bit 2line Extend mode
lcd_cmd(0x14); // OSC 183Hz BIAS 1/5
/* コントラスト設定 */
lcd_cmd(0x70 + (CONTRAST & 0x0F));
lcd_cmd(0x5C + (CONTRAST >> 4));
// lcd_cmd(0x6B); // Follower for 5.0V
lcd_cmd(0x6B); // Follwer for 3.3V
__delay_ms(300);
lcd_cmd(0x38); // Set Normal mode
lcd_cmd(0x0C); // Display On
lcd_cmd(0x01); // Clear Display
}
hsp37のwifiサーバ
hsp37ではtcp-serverの切断は原則ない!
#include "hspsock.as"
port = 12345
sdim buf, 1024
dim position
title "HSP TCP Server"
sockmake 0, port
if stat != 0 : dialog "ポートを開けません": end
mes "12345で待機中..."
*main
sockwait 0
if stat == 0 {
mes "接続されました"
goto *recv
}
wait 10
goto *main
*recv
sockget buf, 1024, 0
if buf != "" {
position = 0
getstr buf, buf, position, 10 ; 10は
mes buf
if buf = "ledon" : mes "LED ON"
if buf = "ledoff" : mes "LED OFF"
sockput "OK\n", 0
buf = ""
}
wait 10
goto *recv
2025年12月14日日曜日
hstp37/dolittle//xcratch/mitapp(other page) on windows with arduino
hsp37ではarduino.asが同梱されておりstandardfirmata.inoでうごく
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
xcratchはstandardfirmata.inoでうごく
!が出ている場合はcomを選択してopen! でないとgpioが制御できない
-----------------------ドリトル通信は--firmataでない--------------------------------------------------
WebAPI 完動:getでjsonを返すサーバを書けばいいだけ
- WebAPIサーバにアクセスして情報を取得するためのオブジェクトです。
- GETでのリクエストに対応しています。
- オンライン版では利用できません。
- 作る: WebAPIオブジェクトを作成します。
- (例)waという名前でWebAPIオブジェクトを生成します。
wa=WebAPI!作る。
- 読む: Webクライアントオブジェクトを作成します。
- オブジェクトのプロパティでURLとパラメータを設定します。urlの設定は必須です。
- 取得データはJSON形式に対応しています。取得したデータをプロパティと配列の構造に変換したオブジェクトを返します。
- (例)wという名前でWebクライアントオブジェクトを生成します。
wa=webapi!作る。 wa:url="https://zip-cloud.appspot.com/api/search"。 wa:zipcode="0790177"。 ret=wa!読む。 フィールド!(ret:results_1:address3)作る。
https://dolittle.eplang.jp/doku.php?id=ch_arduino
で勉強 linux/raspberry piはうまくいかん なんでやろ? (xcratchも同様。。。)
以下で通信する(firmata的)
2025年12月8日月曜日
pickit5 pedia / raspberry pi pico again
ミニpcになってからUSB挿し口を変えて成功することが多くなった。。。。
https://tool-lab.com/pic-basic-23/ ここに電源関係がくわしい sdc,lancableはペンディング
なお書き込みスピードが速すぎとエラーがでたので以下を参考にスピードをLOWにした
書き込み失敗は多くLVP onで起こるようで、mplab snapをつかわんのでLVP offとした
https://www.watchittrend.com/mplab-icd4-write-speed-error/
以下はgetchのコンフリクトが起こったので、char eusart_getch(void)として
(eusart.c内で)衝突回避できた、c90でuart redirectでprintfがつかえた 便利
#include "mcc_generated_files/mcc.h"
#include <stdio.h>
#include <stdlib.h>
int16_t Xaxis,Yaxis,Zaxis;
char Line1[] = " X Y Z ";
char Line2[] = "-xxx -xxx -xxx";
void itostring(char digit, uint16_t data, char *buffer){
char i;
buffer += digit;
for(i=digit; i>0; i--){
buffer--;
*buffer = (data % 10) + '0';
data = data / 10;
}
};
void numtostr(int16_t number, char *buf){
char* ptr;
ptr = buf;
if(number >= 0)
*buf = '+';
else {
number *= -1;
*buf = '-';
}
itostring(3, (uint16_t)number, ptr+1);
};
void main(void){
SYSTEM_Initialize();
while(1){
Xaxis = (int16_t)ADC_GetConversion(ANX) - 511;
Yaxis = (int16_t)ADC_GetConversion(ANY) - 511;
Zaxis = (int16_t)ADC_GetConversion(ANZ) - 511;
numtostr(Xaxis,Line2);
numtostr(Yaxis,Line2+6);
numtostr(Zaxis,Line2+12);
printf(" X Y Z is %s\n", Line1);
printf("%s\n", Line2);
__delay_ms(1000);
}
}
------------------------------------------------------------------
aqm0802が3.3v駆動にて以下を実行(温度はダミー、ビルトインledは便利)
# LM61CIZ
import machine
import utime
# AQM0802
from machine import Pin, I2C
from micropython import const
from utime import sleep
# LM61 Vout connected to 34pin(ACD2)
# input LM61CIZ , convert voltage to temp value
sensor_temp = machine.ADC(2)
conversion_factor = 3.3 / (65535)
# AQM function
_ST7032 = const(0x3e)
_SETTING = const(0x00)
_DISPLAY = const(0x40)
# AQM initialized
def init(i2c):
orders = [b'\x38', b'\x39', b'\x14', b'\x73', b'\x56', b'\x6c',
b'\x38', b'\x0c', b'\x01']
sleep(0.04)
for order in orders[:6]:
i2c.writeto_mem(_ST7032, _SETTING, order)
sleep(0.001)
sleep(0.2)
for order in orders[6:]:
i2c.writeto_mem(_ST7032, _SETTING, order)
sleep(0.001)
sleep(0.001)
# AQM show setting
def show(i2c, string):
i2c.writeto_mem(_ST7032, _SETTING, b'\x01')
sleep(0.002)
for i in string:
i2c.writeto_mem(_ST7032, _DISPLAY, i.encode())
# AQM show setting
def main():
i2c = I2C(1, scl=Pin(27), sda=Pin(26))
init(i2c)
#display temp data
show(i2c, tempdata)
while True:
#センサーから値を取り出します
#reading = sensor_temp.read_u16() * conversion_factor
#センサから取り出した電圧
#print(sensor_temp.read_u16())
# 電圧を温度に変換
#temp_calc = (reading*1000-600) / 10
temp_calc = 23.0
#shellに表示
#print("{0:.1f}".format(temp_calc) + "C")
#print(reading)
#tempdata = str(temp_calc)
#小数点以下1位のみ表示+ 温度のCをつける
tempdata = ("{0:.1f}".format(temp_calc) + "C")
#Run
#if __name__ == '__main__':
main()
# 動作確認用のLチカ
led = machine.Pin(25, machine.Pin.OUT)
led.value(1)
utime.sleep(0.2)
led.value(0)
#each 2 second
utime.sleep(2)
2025年11月28日金曜日
vlang docmentation(https://docs.vlang.io/introduction.html) すこしづつ改訂必要(チャット君利用)
V ではトップレベルに置けるのは:
-
関数宣言
-
グローバル変数の宣言(
__globalorpub mut) -
型宣言(struct, enum など)
-
import
です。
:= を使った代入は 必ず関数内で書く必要 があります。
module main
fn foo() (int, int) {
return 2, 3
}
fn main() {
a, b := foo()
println(a) // 2
println(b) // 3
c,_ := foo()
println(c) // 2
}
pico-sdk and vlang
https://zenn.dev/nonnoise/articles/8c8997c2757cc0でwsl2/ubuntuでできた pico用がメインでpico-wはちょっとめんどげ
-------------------------------------------------------
v -cc gcc -o blink.c blink.v (-cc gccが重要)
blink.v is as below
#flag -I.~/pico/pico/pico-sdk/src/common/pico_stdlib_headers/include
#include "stdlib.h"
#include "time.h"
// ▼ C 関数の宣言(正しい型で)
fn C.stdio_init_all()
fn C.gpio_init(pin u32)
fn C.gpio_set_dir(pin u32, dir bool)
fn C.gpio_put(pin u32, value bool)
fn C.sleep_ms(ms u64)
// ▼ Pico の実行エントリ(V main は使わない)
@[no_main]
@[export: "main"]
fn main() {
C.stdio_init_all()
C.gpio_init(25)
C.gpio_set_dir(25, true)
for {
C.gpio_put(25, true)
C.sleep_ms(500)
C.gpio_put(25, false)
C.sleep_ms(500)
}
}
2025年11月22日土曜日
arduino uno r4 wifi with very convenient httpserver library
UnoR4WiFi_Webserver libraryがうごいた
2025年11月19日水曜日
new Blynkはesp01(at mode)はつかえない!uno r3 + esp01-atはチャット君に聞いた
sunfounderのチュートリアルはblynk legacyでないとあかん ふるいのをインストは危険
そうなので断念 チャット君に聞いて次のコードを得た
YOUR_SSIDとYOUR_PASSWORDを実際のWi-Fi情報に置き換えてください。#include <SoftwareSerial.h>
// ESP-01のRX/TXピンをArduinoの任意のデジタルピンに接続
// ここでは D2(RX) と D3(TX) を使用する例
SoftwareSerial espSerial(2, 3); // RX, TX
void setup() {
Serial.begin(9600);
espSerial.begin(115200); // ESP-01のデフォルトボーレートに合わせて調整 (115200 bpsが多い)
Serial.println("Starting ESP-01 Web Server...");
// ATコマンドでESP-01を設定
sendData("AT+RST\r\n", 2000); // リセット
sendData("AT+CWMODE=2\r\n", 1000); // APモードに設定
sendData("AT+CIFSR\r\n", 1000); // IPアドレスを取得
sendData("AT+CIPMUX=1\r\n", 1000); // 多重接続モード有効化
sendData("AT+CIPSERVER=1,80\r\n", 1000); // TCPサーバー開始 (ポート80)
}
void loop() {
if (espSerial.available()) {
if (espSerial.find("+IPD,")) { // クライアントからのデータ受信を検出
delay(100);
// 受信データを読み込み、HTTPレスポンスを返す処理を実装
String data = "<h1>Hello from Arduino Uno!</h1>";
String cmd = "AT+CIPSEND=0," + String(data.length()) + "\r\n";
sendData(cmd, 1000);
sendData(data, 1000);
sendData("AT+CIPCLOSE=0\r\n", 1000); // 接続を閉じる
}
}
}
String sendData(String command, const int timeout) {
String response = "";
espSerial.print(command);
long time = millis();
while ((time + timeout) > millis()) {
while (espSerial.available()) {
char c = espSerial.read();
response += c;
}
}
Serial.print(response);
return response;
}2025年11月16日日曜日
platformIO 約束事 :: esp8266&esp32 webserver example
#include <Arduino.h>は必須 terminal softはmicrosftのをextension install
関数プロトタイプは非有効 setup,loopで使用する関数は事前定義必須
-----------------------------------------------------------------
https://iot.keicode.com/esp8266/esp8266-webserver.php がうごいた
localipに/led/on,/led/offなどをつけてbrowseするとled on offにつかえる
ーーーーーーーーーーーーーーーーーーーーーーー
esp32には上記のライブラリがないとのことで自作してる人がいた softapなので注意
https://okiraku-camera.tokyo/blog/?p=6008