2022年12月10日土曜日

rasp-pico micropython :: multicore// raspi python::pigpio,mjpg-streamer,Flask example


MicroPython的午睡(12) ラズパイPico、簡単!マルチコアでLチカを | デバイスビジネス開拓団 (jhalfmoon.com)

----------------------------------------------------------------

https://qiita.com/sireline/items/521e303f4e1fb72bca22

------------------------------------------------------------

https://neos21.net/blog/2020/12/29-02.html1で成功 以下のコマンドで実行

192.168.3.10:8080/?action=streamで全画面ででた 

urs/localではwwwがないのに動いた、不思議やな。。。なかったら無視するのだろう

そのほかに、https://hatakekara.com/raspberry-pi-mjpg-streamer-ffmjpg/で

home/pi/mjpg...../mjpg.....experimentalにて./start.hで

192.168.3.10:8080でストリームを選ぶこともできた ここにはwwwがあった

最新版ではinput_raspicam.soがusr/local以下にしかできん どうもinput_uvc.soに

吸収されてしまったようだ ブルーバックスの例題は実施困難であった

注:https://ponkichi.blog/mjpg-streamer/ は参考程度

$ cd /usr/local/lib/mjpg-streamer
$ mjpg_streamer -o './output_http.so -w ./www -p 8080' -i './input_raspicam.so -x 640 -y 480 -fps 30 -q 10'

--------------------------------------------------------------------------

ラズベリーパイを始めよう 卒業問題 weblamp.py と templates/main.html

-------------------py---------------------------- 

from gpiozero import LED

from flask import Flask,render_template,request

app = Flask(__name__)


pins = {

 24:{'name':'coffee maker', 'state':'False'},

 25:{'name':'lamp', 'state':'False'}

}


led24=LED(24)

led25=LED(25)

led24.off()

led25.off()


@app.route("/")

def main():

  pins[24]['state']=led24.is_lit

  pins[25]['state']=led25.is_lit

  

  templateData = {

    'pins' : pins

    }

  return render_template('main.html', **templateData)

  

@app.route("/<changePin>/<action>")

def action(changePin, action):

  changePin = int(changePin)

  deviceName = pins[changePin]['name']

  if action == "on":

    if changePin == 24:

      led24.on()

      pins[24]['state'] = led24.is_lit

    if changePin == 25:

      led25.on()

      pins[25]['state'] = led25.is_lit

    message = "Turned " + deviceName + " on."  

  if action == "off":

    if changePin == 24:

      led24.off()

      pins[24]['state'] = led24.is_lit

    if changePin == 25:

      led25.off()

      pins[25]['state'] = led25.is_lit

    message = "Turned " + deviceName + " off"


  templateData = {

    'message':message,

    'pins':pins

  }


  return render_template('main.html', **templateData)


if __name__=="__main__":

  app.run(host='0.0.0.0',port=80,debug=True)

----------------html----------------------------------------------------------

<!DOCTYPE html>

<head><tilte>Current Status</title>

</head>

<body>

<h1>device listing and status</h1>

{% for pin in pins %}

<p>the {{ pins[pin].name }}

{% if pins[pin].state == True %}

   is currently on (<a href="/{{pin}}/off"> turn off</a>)

{% else %}

   is currently off (<a href="/{{pin}}/on"> turn on</a>)

{% endif %}

</p>

{% endfor %}


{% if message %}

<h2>{{message}}</h2>

{% endif %}

</body></html>

  

2022年12月9日金曜日

Linux programming

 https://zombie-hunting-club-c.hatenablog.com/entry/2017/11/05/192559#7-%E3%82%BD%E3%83%BC%E3%82%B9%E3%82%B3%E3%83%BC%E3%83%89 :: simple 

https://suzuzusu.hatenablog.com/entry/2021/02/28/190000 :: 多重受付

https://blanktar.jp/blog/2015/02/linux-c-fork-and-pipe fork/pipe

https://qiita.com/ngyuki/items/62b27f29316d8931102c     prefork server

https://hiroyukichishiro.com/daemon-in-c-language/#forksetsid daemon server

cf https://wireless-network.net/multi-thread-server/ :: pthreads server


2022年11月27日日曜日

RaspiOsLite: :gpiozero,,flask,ssh,ads1115adc,pcimager,pip3,aplay/arecord

---------------------------gpiozero,flask-------------------------------------

sudo apt install python3-gpiozero 

sudo pip3 install flask

https://www.denshi.club/parts/2020/12/gpiozero13import-mcp3001mcp3002mcp3004mcp3008.html  :: gpiozero tutorial

---------------ssh,scp-------------------------------------------------------------

fseigojp@fseigojp-PC:~$ ssh -X pi@raspberrypi.local では

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

The ECDSA host key for raspberrypi.local has changed,

and the key for the corresponding IP address 192.168.3.12

has a different value. This could either mean that

DNS SPOOFING is happening or the IP address for the host

and its host key have changed at the same time.

Offending key for IP in /home/fseigojp/.ssh/known_hosts:1

  remove with:

  ssh-keygen -f "/home/fseigojp/.ssh/known_hosts" -R "192.168.3.12"

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that a host key has just been changed.

The fingerprint for the ECDSA key sent by the remote host is

SHA256:ZF2oZwd0xaZPE/PL9JnFWnD5tjpGXWYj+xuL0T5KGvQ.

Please contact your system administrator.

Add correct host key in /home/fseigojp/.ssh/known_hosts to get rid of this message.

Offending ECDSA key in /home/fseigojp/.ssh/known_hosts:3

  remove with:

  ssh-keygen -f "/home/fseigojp/.ssh/known_hosts" -R "raspberrypi.local"

ECDSA host key for raspberrypi.local has changed and you have requested strict checking.

Host key verification failed.

というエラーがでるので

ssh-keygen -f "/home/fseigojp/.ssh/known_hosts" -R "raspberrypi.local"を実施
してからssh pi@192.168.3.12,ssh -X pi@raspberrypi.localで成功した
scp::https://uxmilk.jp/50946にくわしい
ーーーーーーーadafruit ads1115 i2c adconverter ,pip3 ーーーーーーーーーーーーーーーー

https://qiita.com/ekzemplaro/items/1e98e1c9e58bd4d8a95c もうcircuitpythonでないと

いんすとできん(2022年末) 要注意

https://qiita.com/Lovely_030_Dong/items/672e0e98a5de11923f34 

pip3 install and git command install necessary!!

------------------------pc imager これだけではsshできん冒頭を参照------------------------------------

pc image writeのときに無線Lan,sshの設定が必要 設定印を操作

http://www.n-mmra.net/audio/raspi-os-ver/raspi-os-ver.htmlを参照

------------------aplay/arecord------------------------------------------------------------------------

 https://qiita.com/tukiyo3/items/524b435ffaf61199f434

https://netlog.jpn.org/r271-635/2019/02/ubuntu_google_home.html :: google assistant

2022年11月23日水曜日

Cとpthreads:: soloFly,soloFly2,soloFly3,soloFlyQueue

 #include <pthread.h>

#include <unistd.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <math.h>



#define WIDTH 78   /* スクリーン幅 */

#define HEIGHT 22  /* スクリーン高さ  原文では23だがこうする */

#define MAX_FLY 1  /* 描画するハエの数 */

#define DRAW_CYCLE 50   /* 描画周期(ミリ秒)*/


int stopRequest;  /* スレッド終了フラグ */


/*

 * ミリ秒単位でスリープする

 */

void mSleep(int msec) {

    struct timespec ts;

    ts.tv_sec = msec/1000;

    ts.tv_nsec = (msec%1000)*1000000;

    nanosleep(&ts, NULL);

}


/*

 * 画面クリア

 */

void clearScreen() {

    fputs("\033[2J", stdout); /* このエスケープコードをターミナルに送ると画面がクリアされる */

}


/*

 * カーソル移動

 */

void moveCursor(int x, int y) {

    printf("\033[%d;%dH", y, x); /* このエスケープコードをターミナルに送るとカーソル位置がx,yになる。*/

}


/*

 * カーソル位置保存

 */

void saveCursor() {

    printf("\0337"); /* このエスケープコードをターミナルに送るとカーソル位置を記憶する */

}


/*

 * カーソル位置復帰

 */

void restoreCursor() {

    printf("\0338"); /* このエスケープコードをターミナルに送ると記憶したカーソル位置に戻る */

}


/*

 * ハエ構造体

 */

typedef struct {

    char mark;    /* 表示キャラクタ */

    double x, y;  /* 座標 */

    double angle; /* 移動方向(角度)*/

    double speed; /* 移動速度(ピクセル/秒)*/

    double destX, destY; /* 目標地点 */

    int busy;     /* 移動中フラグ */

    pthread_mutex_t mutex;

} Fly;


Fly flyList[MAX_FLY];


/*

 * ハエの状態を初期化

 */

void FlyInitCenter(Fly *fly, char mark_) {

    fly->mark = mark_;

    pthread_mutex_init(&fly->mutex, NULL);

    fly->x = (double)WIDTH/2.0;

    fly->y = (double)HEIGHT/2.0;

    fly->angle = 0;

    fly->speed = 2;

    fly->destX = fly->x;

    fly->destY = fly->y;

    fly->busy = 0;

}


/*

 * ハエ構造体の利用終了

 */

void FlyDestroy(Fly *fly) {

    pthread_mutex_destroy(&fly->mutex);

}


/*

 * ハエを移動する

 */

void FlyMove(Fly *fly) {

    int i;

    pthread_mutex_lock(&fly->mutex);

    fly->x += cos(fly->angle);

    fly->y += sin(fly->angle);

    pthread_mutex_unlock(&fly->mutex);

}


/*

 * ハエが指定座標にあるかどうか

 */

int FlyIsAt(Fly *fly, int x, int y) {

    int res;

    pthread_mutex_lock(&fly->mutex);

    res = ((int)(fly->x) == x) && ((int)(fly->y) == y);

    pthread_mutex_unlock(&fly->mutex);

    return res;

}


/*

 * 目標地点に合わせて移動方向と速度を調整する

 */

void FlySetDirection(Fly *fly) {

    pthread_mutex_lock(&fly->mutex);

    double dx = fly->destX-fly->x;

    double dy = fly->destY-fly->y;

    fly->angle = atan2(dy, dx);

    fly->speed = sqrt(dx*dx+dy*dy)/5.0;

    if(fly->speed < 2) /* あまり遅すぎると分かりづらいので */

        fly->speed = 2;

    pthread_mutex_unlock(&fly->mutex);

}


/*

 * 目標地点までの距離を得る

 */

double FlyDistanceToDestination(Fly *fly) {

    double dx, dy, res;

    pthread_mutex_lock(&fly->mutex);

    dx = fly->destX-fly->x;

    dy = fly->destY-fly->y;

    res = sqrt(dx*dx+dy*dy);

    pthread_mutex_unlock(&fly->mutex);

    return res;

}


/*

 * ハエの目標地点をセットする

 */

int FlySetDestination(Fly *fly, double x, double y) {

    /* 移動中はセット禁止 */

    if(fly->busy)

        return 0;

    pthread_mutex_lock(&fly->mutex);

    fly->destX = x;

    fly->destY = y;

    pthread_mutex_unlock(&fly->mutex);

    return 1;

}


/*

 * ハエを動かすスレッド

 */

void *doMove(void *arg) {

    Fly *fly = (Fly *)arg;

    while(!stopRequest) {

        /* 行き先がセットされるのを待つ */

        fly->busy = 0;

        while((FlyDistanceToDestination(fly) < 1) && !stopRequest) {

            mSleep(100);

        }

        fly->busy = 1;

        mSleep(1000);

        /* 目標地点の方向をセット */

        FlySetDirection(fly);

        

        /* 行き先に到着するまで移動する */

        while((FlyDistanceToDestination(fly) >= 1) && !stopRequest) {

            FlyMove(fly);

            mSleep((int)(1000.0/fly->speed));

        }

    }

    return NULL;

}


/*

 * スクリーンを描画する

 */

void drawScreen() {

    int x,y;

    char ch;

    int i;


    saveCursor();

    moveCursor(0, 0);

    for(y = 0; y < HEIGHT; y++) {

        for(x = 0; x < WIDTH; x++) {

            ch = 0;

            /* x,yの位置にあるハエがあればそのmarkを表示する */

            for(i = 0; i < MAX_FLY; i++) {

                if(FlyIsAt(&flyList[i], x, y)) {

                    ch = flyList[i].mark;

                    break;

                }

            }

            if(ch != 0) {

                putchar(ch);

            } else if((y == 0) || (y == HEIGHT-1)) {

                /* 上下の枠線を表示する */

                putchar('-');

            } else if((x == 0) || (x == WIDTH-1)) {

                /* 左右の枠線を表示する */

                putchar('|');

            } else {

                /* 枠線でもハエでもない */

                putchar(' ');

            }

        }

        putchar('\n');

    }

    restoreCursor();

    fflush(stdout);

}


/*

 * スクリーンを描画し続けるスレッド

 */

void *doDraw(void *arg) {

    while(!stopRequest) {

        drawScreen();

        mSleep(DRAW_CYCLE);

    }

    return NULL;

}


int main() {

    pthread_t drawThread;

    pthread_t moveThread;

    int i;

    char buf[40],*cp;

    double destX, destY;


    /* 初期化 */

    clearScreen();

  

    FlyInitCenter(&flyList[0], '@');


    /* ハエの動作処理 */

    pthread_create(&moveThread, NULL, doMove, (void *)&flyList[0]);


    /* 描画処理 */

    pthread_create(&drawThread, NULL, doDraw, NULL);

  moveCursor(0,23); // この記述が絶対必要 23行目で行き先をたずねる

    /* メインスレッドは何か入力されるのを待ち、ハエの目標点をセットする */

    while(1) {

        printf("Destination? ");

        fflush(stdout);

        fgets(buf, sizeof(buf), stdin);

        if(strncmp(buf, "stop", 4) == 0) /* "stop"と入力するとプログラム終了 */

            break;

        /* 座標を読み取ってセットする */

        destX = strtod(buf, &cp);

        destY = strtod(cp, &cp);

        if(!FlySetDestination(&flyList[0], destX, destY)) { 

            printf("The fly is busy now. Try later.\n");

            // この事象が起きる場合、これはDestinationo? の上にでる!

        }

    }

    stopRequest = 1;

    

    /* スレッド撤収 */

    pthread_join(drawThread, NULL);

    pthread_join(moveThread, NULL);

    FlyDestroy(&flyList[0]);


    return 0;

}

2022年11月20日日曜日

Raspi③ make,Header-Lib,Nasm/Gasm,UART,I2C-ADC

https://www.miraclelinux.com/tech-blog/0icygs  これが詳しい

http://omilab.naist.jp/~mukaigawa/misc/Makefile.html 総論的

https://blog.foresta.me/posts/gnu_make_syntax/ $^,$@の説明が詳しい

--------------------------------------------------------------

https://monozukuri-c.com/langc-headerfile/#toc2 ::header file tutorial

もう一度基礎からC言語 第15回 関数の宣言~ライブラリとヘッダファイル externとモジュール (grapecity.co.jp)

----------------------------------------------------------------

https://www.koeki-prj.org/~yuuji/2021/ks-b/asm/asm.html nasm tutorial

 Linuxでアセンブラプログラミング (finito-web.com) 

 nasm -f elf64 hello.asm でないと動かん! 要注意
Assembly Programming Linux (mztn.org) nasm tutorial
ラズパイでアセンブラ、最初の一歩かな? | デバイスビジネス開拓団 (jhalfmoon.com) これはgasの説明
アセンブラに手を出してみる - Qiita これは両方
-------------------------------------------- --------------------------------------------

Raspberry Pi と Arduino をUSBシリアル通信(第一弾) - とある科学の備忘録 (hatenablog.com) も参考になったが基本はraspbery piをはじめように詳述されてる

RaspberryとArduinoをシリアル通信する | (soup01.com) もあったけどね

---------------------------------------------------------------

https://riderid.hatenablog.com/entry/2021/07/26/130605


2022年11月6日日曜日

Raspi②サーボ、BME、DHT、ADC、DAC、webiopi@flask、drv8835,pwm、テザリング

赤外線距離OK 超音波もOK


wiringpiのハードウェアPWMでサーボモータ(MG996R)を動かす │ Kazuki Room ~ モノづくりブログ ~ (kazuki-room.com) PYTHON CODE


ラズベリーパイ(ラズパイ)で温度・湿度・気圧をまとめて取得!AE-BME280でIC2通信 | Device Plus - デバプラ pythonでOkとなった

https://www.souichi.club/raspberrypi/temperature-and-humidity/ dht11

たしかクジラpythonでもOKとなった 以下3つはARDUINO

DHT11_Temperature_and_Humidity_Sensor__SKU__DFR0067_-DFRobot 

日々 ほげほげ 研究所: ArduinoでSPI通信を使って8チャンネルADC MCP3208からデータを読み取る (hibihogehoge.com) 

ArduinoとDAコンバータ(MCP4922)を使用したアナログ出力の解説 | srltテクノアーカイブ (srlt-tech.com) 

-------------------------------------

webiopi | Device Plus - デバプラ BLUE BACKS

WebブラウザからRaspberry Pi を操作する(Flask 利用) (hiramine.com) OREILY

じつはKUJIRAHAND本に超簡単なPYTHON CODEがあった これでいいかも。。。。

----------------------------------------------------------------------

余ってるルータつかうといらんけど。。。。以下に記す

Raspberry Pi 4 をWiFiアクセスポイントにする方法 - ボドテック!! (boardtechlog.com)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

🚘⚫DCモータを制御する - ⭐⭐|ラズベリーパイのレシピ (zenn.dev)

基本的にdigitalWriteでつかおう pin1は電池プラス、pin2,pin,3はモータ1

pin4,pin5はモータ2をつける、pin6は電池マイナスでこれはラズパイのGNDともつなぐ

pin7,pin8はモータ2制御、pin9,pin10はモータ1制御、pin11(mode)はラズパイのGND

最期のpin12は基本ラズパイの3v3につなぐ

(アルディーノでは5VにつないでもOK、ラズパイも多分OKだが、本体壊すおそれあり!)

アルディーノでは電池は単三x2でいけたが、ラズパイもいけた single gear boxにて

---------------------------------------------------------------------- 

hardwarePWMがつかえるのはgpio17,gpio18のみ、それ以外のポートでpwm

するにはsoftToneCreate関数がつかえる 以下も参考になった

WiringPi の SoftPWM機能 – Linux & Android Dialy (developapp.net)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ex1.RaspberryPiでAndroidスマホのUSBテザリングを利用する(+ルーター化) - RaspberryPiで各種サーバー作り! - ある阪大生の物置小屋 (ninja-web.net)

スマホのモバイルデータ通信をオン、USB接続してファイル転送モード

プライベートDNSは自動にしておいた(いらんかもしれんが)

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

2022年11月3日木曜日

シェークスピア全作品

  37作といわれる 最後の第38作は合作といわれる

史劇 10 items

悲劇 11 item

喜劇 17items

  1. 間違いの喜劇Comedy of Errors、1592年 - 1594年)@
  2. じゃじゃ馬ならしTaming of the Shrew、1593年 - 1594年)
  3. ヴェローナの二紳士The Two Gentlemen of Verona、1594年)@
  4. 恋の骨折り損 Love's Labour's Lost、1594年 - 1595年)
  5. 夏の夜の夢A Midsummer Night's Dream、1595年 - 96年)@
  6. ヴェニスの商人The Merchant of Venice、1596年 - 1597年)@
  7. ウィンザーの陽気な女房たちThe Merry Wives of Windsor、1597年)
  8. 空騒ぎMuch Ado About Nothing、1598年 - 1599年)
  9. お気に召すままAs You Like It、1599年)@
  10. 十二夜Twelfth Night, or What You Will、1601年 - 1602年)
  11. 終わりよければ全てよしAll's Well That Ends Well、1602年 - 1603年)P
  12. 尺には尺をMeasure for Measure、1604年)P
  13. ペリクリーズPericles, Prince of Tyre、1607年 - 1608年)R
  14. シンベリンCymbeline、1609 - 10年)R@
  15. 冬物語The Winter's Tale、1610年 - 1611年)R@
  16. テンペストThe Tempest、1611年)R@
  17. 二人のいとこの貴公子The Two Noble Kinsmen、1613年)R@  これは合作とされる

Rはロマンス劇、Pは問題劇ともカテゴライズされる作品である。

英語で書かれた20世紀の小説ベスト100(モダン・ライブラリー編集部選)

 


1. Ulysses, James Joyce
 『ユリシーズ』 ジェイムズ・ジョイス
@2. The Great Gatsby, F. Scott Fitzgerald
 『華麗なるギャツビー』 F・スコット・フィッツジェラルド
3. A Portrait of the Artist as a Young Man, James Joyce
 『若い芸術家の肖像』 ジェイムズ・ジョイス
@4. Lolita, Vladmir Nabokov
 『ロリータ』 ウラジミール・ナボコフ
@5. Brave New World, Aldous Huxley
 『素晴らしい新世界』 オールダス・ハクスリー
@6. The Sound and the Fury, William Faulkner
 『響きと怒り』 ウィリアム・フォークナー
@7. Catch-22, Joseph Heller
 『キャッチ-22』 ジョセフ・ヘラー
@8. Darkness at Noon, Arthur Koestler
 『真昼の暗黒』 アーサー・ケストナー
9. Sons and Lovers, D. H. Lawrence
 『息子と恋人』D・H・ロレンス
@10. The Grapes of Wrath, John Steinbeck
 『怒りの葡萄』 ジョン・スタインベック
11. Under the Volcano, Malcolm Lowry
 『活火山の下』 ラウリー・マルカム
12. The Way of All Flesh, Samuel Butler
 『万人の路』 サミュエル・バトラー
@13. 1984, George Orwell
 『1984』 ジョージ・オーウェル
14. I, Claudius, Robert Graves
 『私、クラウディウス』 ロバート・グレイヴス
15. To the Lighthouse, Virginia Woolf
 『灯台へ』 ヴァージニア・ウルフ
16. An American Tragedy, Theodore Dreiser
 『アメリカの悲劇』 シオドア・ドライザー
17. The Heart Is a Lonely Hunter, Carson McCullers
 『心は孤独な狩人』 カーソン・マッカラーズ
@18. Slaughterhouse Five, Kurt Vonnegut, Jr.
 『スローターハウス5』 カート・ヴォネガット・Jr.
19. Invisible Man, Ralph Ellison
 『見えない人間』 ラルフ・エリソン
20. Native Son, Richard Wright
 『アメリカの息子』 リチャード・ライト
21. Henderson the Rain King, Saul Bellow
 『雨の王ヘンダソン』 ソウル・ベロー
22. Appointment in Samarra, John O'Hara
 『サマーラの町で会おう』 ジョン・オハラ
23. U. S. A. (Trilogy), John Dos Passos
 『U.S.A.』 ジョン・ドス・パソス
@24. Winesburg, Ohio, Sherwood Anderson
 『ワインズバーグ・オハイオ』 シャーウッド・アンダスン
25. Passage to India, E. M. Forster
 『インドへの道』 E・M・フォースター
26. The Wings of the Dove, Henry James
 『鳩の翼』 ヘンリー・ジェイムズ
27. The Ambassadors, Henry James
 『大使たち』 ヘンリー・ジェイムズ
28. Tender is the Night, F. Scott Fitzgerald
 『夜はやさし』 F・スコット・フィッツジェラルド
29. The Studs Lonigan Trilogy, James T. Farrell
 『スタッズ・ロニガン 三部作』 ジェイムズ・T・ファレル
30. The Good Soldiers, Ford Maddox Ford
 『かくも悲しい話を…』 フォード・マドックス・フォード
@31. Animal Farm, George Orwell
 『動物農場』 ジョージ・オーウェル
32. The Golden Bowl Henry James
 『黄金の盃』 ヘンリー・ジェイムズ
33. Sister Carrie, Theodore Dreiser
 『シスター・キャリー』 シオドア・ドライザー
34. A Hundful of Dust, Evelyn Waugh
 『一握の塵』 イーヴリン・ウォー
@35. As I Lay Dying, William Faulkner
 『死の床に横たわりて』 ウィリアム・フォークナー
36. All the King's Men, Robert Penn Warren
 『すべての王の臣』 ロバート・ペン・ウォーレン
37. The Bridge of San Luis Rey, Thornton Wilder
 『サン・ルイス・レイの橋』 ソーントン・ワイルダー
38. Howard's End, E. M. Forster
 『ハワーズ・エンド』 E・M・フォースター
39. Go Tell it on the Mountain, James Baldwin
 『山にのぼりて告げよ』ジェイムズ・ボールドウィン
@40. The Heart of the Matter, Graham Greene
 『事件の核心』 グレアム・グリーン
@41. The Lord of the Flies, William Golding
 『蠅の王』 ウィリアム・ゴールディング
42. Deliverance, James Dickey
 『脱出』 ジェイムズ・ディッキー
43. A Dance to the Music of Time (series), Anthony Powell
 『時の音楽のなかの舞踏』 アンソニー・パウエル
44. Point Counter Point, Aldous Huxley
 『恋愛対位法』 オールダス・ハクスリー
@45. The Sun Also Rises, Ernest Hemingway
 『日はまた昇る』 アーネスト・ヘミングウェイ
46. The Secret Agent, Joseph Conrad
 『密偵』 ジョセフ・コンラッド
47. Nostromo, Joseph Conrad
 『ノストローモ』 ジョセフ・コンラッド
48. The Rainbow, D. H. Lawrence
 『虹』 D・H・ロレンス
49. Women in Love, D. H. Lawrence
 『恋する女たち』 D・H・ロレンス
50. Tropic of Cancer, Henry Miller
 『南回帰線』 ヘンリー・ミラー
51. The Naked and the Dead, Norman Mailer
 『裸者と死者』 ノーマン・メイラー
52. Pornoy's Complaint, Philip Roth
 『ポートノイの不満』 フィリップ・ロス
53. Pale Fire, Vladmir Nabokov
 『青白い炎』 ウラジミール・ナボコフ
@54. Light in August, William Faulkner
 『八月の光』 ウィリアム・フォークナー
55. On the Road, Jack Kerouac
 『路上』 ジャック・ケルアック
56. The Maltese Falcon, Dashiell Hammett
 『マルタの鷹』 ダシール・ハメット
57. Parade's End, Ford Maddox Ford
 『観兵式の終わり』 フォード・マドックス・フォード
58. The Age of Innocence, Edith Warton
 『エイジ・オブ・イノセンス』 イーディス・ウォートン
59. Zuleika Dobson, Max Beerbohom
 『ズレイカ・ドブソン』 マックス・ビアボウム
60. The Moviegoer, Walker Percy
 『映画狂時代』 ウォーカー・パーシー
61. Death Comes for the Archibishop, Willa Cather
 『死を迎える大司教』 ウィラ・キャザー
62. From Here to Eternity, James Jones
 『地上より永遠に』 ジェイムズ・ジョーンズ
63. The Wapshot Chronicles, John Cheever
 『ワップショット家の人びと』 ジョン・チーヴァー
@64. The Catcher in the Rye, J. D. Salinger
 『ライ麦畑でつかまえて』 J・D・サリンジャー
65. A Clockwork Orange, Anthony Burgess
 『時計じかけのオレンジ』 アントニー・バージェス
@66. Of Human Bondage, W. Somerset Maugham
 『人間の絆』 ウィリアム・サマセット・モーム
@67. Heart of Darkness, Joseph Conrad
 『闇の奥』 ジョセフ・コンラッド
68. Main Street, Sinclair Lewis
 『本町通り』 シンクレア・ルイス
69. The House of Mirth, Edith Warton
 『歓楽の家』 イーディス・ウォートン
70. The Alexandria Quartet, Lawrence Durrell
 『アレクサンドリア四重奏』 ロレンス・ダレル
71. A High Wind in Jamaica, Richard Hughes
 『ジャマイカの烈風』 リチャード・ヒューズ
72. A House for Ms. Biswas, V. S. Naipaul
 『ビスワース氏の家』 V・S・ナイポール
73. The Day of the Locust, Nathaniel West
 『イナゴの日』 ナサニエル・ウェスト
@74. A Farewell to Arms, Ernest Hemingway
 『武器よさらば』 アーネスト・ヘミングウェイ
75. Scoop, Evelyn Waugh
 『スクープ』 イーヴリン・ウォー
76. The Prime of Miss Jean Brodie, Muriel Spark
 『ミス・ブロウディの青春』 ミュリエル・スパーク
77. Finnegans Wake, James Joyce
 『フィネガンズ・ウェイク』 ジェイムズ・ジョイス
78. Kim, Rudyard Kipling
 『少年キム』 ラドヤード・キプリング
@79. A Room with a View, E. M. Forster
 『眺めのいい部屋』 E・M・フォースター
80. Brideshead Revisited, Evelyn Waugh
 『ブライヅヘッドふたたび』 イーヴリン・ウォー
81. The Adventure of Augie March, Saul Bellow
 『オーギー・マーチの冒険』 ソウル・ベロー
82. Angle of Repose, Wallace Stegner
 『アングル・オブ・リポーズ』 ウォレス・ステグナー
83. A Bend in the River, V. S. Naipaul
 『暗い河』 V・S・ナイポール
84. The Death of the Heart , Elizabeth Bowen
 『心の死』 エリザベス・ボウエン
85. Lord Jim, Joseph Conrad
 『ロード・ジム』 ジョセフ・コンラッド
86. Ragtime, E. L. Doctorow
 『ラグタイム』 E・L・ドクトロウ
87. The Old Wives' Tale, Arnold Bennett
 『老妻物語』 アーネルド・ベネット
@88. The Call of the Wild, Jack London
 『野生の呼び声』 ジャック・ロンドン
89. Loving, Henry Green
 『愛する』 ヘンリー・グリーン
90. Midnight's Children, Salman Rushdie
 『真夜中の子供たち』 サルマン・ラシュディ
@91. Tobacco Road, Erskine Caldwell
 『タバコ・ロード』 アースキン・コールドウェル
92. Ironweed, William Kennedy
 『黄昏に燃えて』 ウィリアム・ケネディ
93. The Magus, John Fowles
 『魔術師』 ジョン・ファウルズ
94. The Wide Sargasso Sea, Jean Rhys
 『サルガッソーの広い海』 ジーン・リース
95. Under the Net, Iris Murdoch
 『網のなか』 アイリス・マードック
@96. Sophie's Choice, William Styron
 『ソフィーの選択』 ウィリアム・スタイロン 映画で。。。。
97. The Sheltering Sky, Paul Bowles
 『シェルタリング・スカイ』 ポール・ボウルズ
@98. The Postman Always Rings Twice, James M. Cain
 『郵便配達は二度ベルを鳴らす』 ジェイムズ・M・ケイン
99. The Ginger Man, J. P. Donleavy
 『赤毛の男』 J・P・ドンレヴイ
100. The Magnificient Ambersons, Booth Tarkington
 『すばらしいアンバソン家の人びと』 ブース・ターキントン

2022年10月25日火曜日

RaspPi① adt7410,builtin-flask,mcp3208,mcp3002,legacy-cam,aqm0802,lcd1602

ーーーーーーーーーadt7410 i2c tempーーーー

scl:serial clock, sda:serial datasd

https:cdls ls

ls

//kats-eye.net/info/2018/11/07/adt7410/

https://note.cman.jp/convert/2hosu/

ーーーーーーbuiltin flaskーーーーーーーーーーーーーーーーーーーー

https://irohaplat.com/raspberry-pi-local-web-server-flask/

なんとpython3にflaskがビルトインされていた! ラズパイすげー

ーーーーー bbks 本文の直書きコードと違いspidevを用いた付属コードーーーー

mcp3208:: 【ラズパイ】A/Dコンバータ MCP3208と通信するコードの解説 │ be発明家エンジニア (s-toki.net) 初期化の部分が丁寧に書かれている

mcp3208 は16:vcc,15:vcc,14:gnd,13;sck,12:miso,11:mosi,10:ce0,09:gnd

0〜7は各チャンネル(8チャンネルADC)

https://craft-gogo.com/raspberrypi-adconverter/#toc5 が非常に参考になった!

# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO

from time import sleep

import spidev

# MCP3208からSPI通信で12ビットのデジタル値を取得。0から7の8チャンネル使用可

def readadc_spidev(adcnum):

    if ((adcnum > 7) or (adcnum < 0)):

        return -1

    command1 = 0x6 | (adcnum & 0x4)>>2

    command2 = (adcnum & 0x3)<<6

    ret=spi.xfer2([command1,command2,0])

    adcout = (ret[1]&0xf)<<8 | ret[2]

    return adcout


GPIO.setmode(GPIO.BCM)

spi=spidev.SpiDev()

spi.open(0, 0) # bus0, CE0

spi.max_speed_hz = 1000000 # 1MHz


try:

    while True:

        inputVal0 = readadc_spidev(0)

        print(inputVal0)

        sleep(0.2)


except KeyboardInterrupt:

    pass


spi.close()

---------------------------------------------------------------------------------

#クジラ本のコード、mcp3002 using

import spidev

import time

# SPI通信を行うための準備 --- (*1)

spi = spidev.SpiDev()

spi.open(0, 0) # bus0,cs 0(ce1をえらぶなら1)

spi.max_speed_hz = 1000000 # 通信速度の設定 1MHZ

while True:     # 連続して値を読む

    try:

        # https://denkisekkeijin.com/raspberrypi/pi-spi-volume-rd/

        resp = spi.xfer2([0x68, 0x00]) # SPIに命令して回答をえる

# https://www.denshi.club/pc/raspi/5raspberry-pi-zeroiot9a-d6mcp3002.html

# 0、スタート1、シングル1、ODDはチャンネル0だから0、最後はMSBからで1

#     0b0110 1000 => 0x68  これで2バイトおくり、2バイトかえしてもらう

# 読んだ値を10ビットの数値に変換  このばあいMSBからである

# NullBit、10ビット、が入っているが。。。。

        value = ((resp[0] << 8) + resp[1]) & 0x3FF # 0x3 -> 0b0011 は?

# data = ((adc[0] & 3) << 8) | adc[1] と一緒 みたい。。。。

# つまり第一バイトの下位2桁をとり、第二バイトは全部取る。。。。多分!

        print(value)

        time.sleep(0.2)

    except KeyboardInterrupt:

        break


# 通信を終了する --- (*4)

spi.close()

--------------------legacy-cam------------------------------------------------------------

camera module の設定がlegacyになっていたが

https://www.boardgamepark.com/entry/pi_cameraを参考にした

カメラモジュールがOnになっているかカメラが認識されているかも説明あり

https://kats-eye.net/info/2018/11/07/adt7410/ によればregister 0x00,0x01にて

データ変換した結果をもち13ビットデータを含む16ビット(1ワード)を発出

するようである 00には下位ビット(ただし最後の3ビットは余分の0)、

01には上位ビットがはいっている 

https://note.cman.jp/convert/2hosu/ に2のほしゅう

ーーーーーーーーーーaqm0802ーーーーーーーーーーーーーーーーーーー

【ST7032i】使うためのデータシート抜粋日本語訳 | くろべこblog (kurobekoblog.com)

を参考に、Cでライブラリをおこしてみたいとおもったら以下のサイトをみつけた

I2C接続AQMシリーズのキャラクタ表示LCDをラズパイで使う (1) AQM0802 | 電子工作の環境向上 (denshi.club) 残念ながらパイソンで書かれている

このサイトにはaqm1602,acm1602,so1602の説明もあるがaqm1602以外は高価!

aqm1602はCでラズパイ本に詳しい

------------------------lcd 1602----------------------

https://hotsmmrblog.com/display_string_on_1602_lcd_module_with_pi/ 

lcd1602 using  site at raspi

-------------------------------------------------------------------


2022年10月16日日曜日

ラズピコをシリアル機器としてラズパイで使用する(クジラ一応うごくが、改訂した)

 pip3 install pyserial のあと dmesg | grep -i ttyACMでdevice(ttyACM0 etc)を得る

import machine,time

adc0  = machine.ADC(0)

f  = 100 / 65535

while Tru:

      v  =  adc0.read_u16()  *  f

      pirnt(v)

      time.sleep(2) # kujira は time.sleep(0.5)  だが 多めの休止時間をとっとく

以上をadc-send.pyとしてthonnyでrun、以nanをadc-receive.pyとして

python3 でrunすると、一応うごくが  ときどき止まってしまうので

timeoutをとってしまったら、止まらなくなった

https://misoji-engineer.com/archives/raspberry-pi-pico-serial.html を参考にした

import serial
# kujira code -> ser = serial.Serial('/dev/ttyACM0', 115200, timeout = 1)
ser = serial.Serial('/dev/ttyACM0', 115200)

try:
while True:
data = ser.readline() # read from pico
s = data.decode()
pinrt("read:", s.strip())
except:
ser.close()

2022年10月14日金曜日

AVR総論とタイマ, attiny13a/85/44a and atmega328p

総論はこれ! 

 https://dbpro.xyz/avrwiki/wiki.cgi?page=Getting+Started+Notes+-+Ports#p8

http://usicolog.nomaki.jp/engineering/avr/avrPWM.html はタイマ総論

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ATtiny13。ちっちゃいマイコンの書き込み方~Lチカまで@Arduino | くろべこblog (kurobekoblog.com)  attiny13aはattiny85と環境設定jsonはちがう 以下の通り

https://mcudude.github.io/MicroCore/MicroCore_MCUdude_MicroCore_index.json

Lチカは以下のとおり

#include <avr/io.h>

#include <util/delay.h> // for _delay....

void setup() {

  DDRB |= 0b00001000; // PB3 set to output 

}

void loop() {

 PORTB |= 0b00001000; //PB3 output to high

 _delay_ms(1000);

 PINB |= 0b00001000;  // 注 総論参照

_delay_ms(1000);

}


--------------------------------- atmega328p ---------------------- 
https://qiita.com/oh_one/items/ac016c58190f77f66a13
https://omoroya.com/arduino-extra-edition-22/

Arduinoで、小っちゃいIC(ATTiny)を使う方法 - Qiita 

attiny13,attiny85とポートレジスタが違うので注意 

吉野さんから以下のコードをいただいた

コードはUNOとATtiny13aを一緒にしています。
ATtiny13aはポートがBのみで、D0からD4までです。
D1、D2(6番、7番ピン)を使っています。
コンデンサと抵抗は特になくてもOKです。
 
UNOはD12にスイッチ、D11にLEDをそれぞれつないでください。
ポートはB、C、Dがありますが、B(D8からD13)を使っています。

// push switch to LED on
// avr@UNO
//  D11----R----LED----GND
//  D12----swich----GND
//  

int main(void) {
  DDRB = 0b00001000;  // D11->OUTPUT 最下位から数える 8,9,10,11,....
  PORTB = 0b00010000; // D12->INPUT_PULLUP
  while (1) {
    bool state;
    state = (~PINB >> 4) & 1;
    if (state == 0) {
      PORTB &= ~0b00001000;
    }
    else {
      PORTB |= 0b00001000;
    }
  }
}

 /*

 *  8bits Timer Counter  ATtiny13A 
 */

#include <avr/io.h>

uint8_t hsPWM(bool pin, int8_t pwm){
  // 内臓クロック9.6MHz

  if(pin==0){
    DDRB   |= 0b00000001;       // PB0出力設定
    TCCR0A |= 0b10000011;       // PB0非反転出力,高速PWM
    TCCR0B |= 0b00000010;       // 8bit高速PWM,8分周比
    OCR0A = pwm;                // 8bitタイマ/カウンタ比較レジスタA
    return OCR0A;
  }
  else{
    DDRB   |= 0b00000010;       // PB1出力設定
    TCCR0A |= 0b00100011;       // PB1非反転出力,高速PWM
    TCCR0B |= 0b00000011;       // 8bit高速PWM,64分周比
    OCR0B = pwm;                // 8bitタイマ/カウンタ比較レジスタB
    return OCR0B;
  }
}

void setup() {
}

void loop() { 
    hsPWM(1, 50);              // ピン番号、デューティ比(ex.50/255)
}


デューティ比を変えるには関数のpwmの値(1~255)を変えてください。
分周比を変えると周波数が変わります。
ちなみにTCCR0Bレジスタの下位3ビットが、010:8分周 011:64分周 100:256分周
101:024分周です。

----------------------------------------------------------

attiny85::flash 8kもある! attiny44a::14pin!

------328p------------------------------------------------------------------

https://qiita.com/oh_one/items/ac016c58190f77f66a13  about atmega328p