2021年9月5日日曜日

Python 書評 Pythonではじめるプログラミング

 改めてPythonを学びなおすために、リファレンスとなる本が欲しくなった。

このコロナのご時世で大きな書店に行って探すのも、正直怖い。

図書館ですぐ借りれそうな本を片っ端から借りてみた。

1冊め


Pythonではじめるプログランミング

何故か画像が回転。

インプレス社 が出版 2000円との事。

高いな~

内容:

結構良い。

斜め読みで半分位呼んだが、結構そんな事を知りたいんだよね。という内容がありました。

CSVファイルを読み込む時のSplit の使い方など。

何故かUNIXで使うことを前提にしているので、超初心者はこの本買っても駄目でしょうね。

書いている内容は良いので、初心者に売れないのが残念ですね。

でも、Pythonの概要を掴みたい、おっさんエンジニアには良いと思います。

私は買うかもしれません。




2021年9月4日土曜日

学び直しのPython 1日目 UARTでArudinoと通信

 今日からPythonの学び直しをすることにしました。

成果:

1)UARTでArduino(Teensy3.6だけど、、)とUARTで通信できるようになりました。

①WindowsからArduinoのLEDをON/OFF

<Windows>

import serial
import time
 
ser = serial.Serial('com3'baudrate=115200parity=serial.PARITY_NONE)

for i in range(10):
        ser.write(b'a')
        print("LED ON")
        time.sleep(0.5)
        ser.write(b'0')
        print("LED OFF")
        time.sleep(0.5)

ser.close()
print("bbb")

<Arduino>

byte val=0;

#define LED_PIN 13

void setup() { 

   pinMode(LED_PIN, OUTPUT); 

   Serial.begin(115200);

}

void loop() {

   if(Serial.available() > 0){ 

      val = Serial.read();

   }

   if(val == 'a') digitalWrite(LED_PIN, HIGH);

   else if(val == '0') digitalWrite(LED_PIN, LOW);

}

// https://shizenkarasuzon.hatenablog.com/entry/2019/03/04/004048

// TeensyのLEDが a で点灯 0 で消灯 プログラム

②ArduinoからWindowsへデータ送信

<Windows>

import serial
ser = serial.Serial('COM3'115200)
while True:
    String_data = ser.readline()
    print(String_data.strip().decode('utf-8'))
ser.close()

<Arduino>

void setup(){

  Serial.begin(115200);

  pinMode(13, OUTPUT);

}

void loop(){

  Serial.println("LED ON");

  digitalWrite(13, HIGH);

  delay(500);

  Serial.println("LED OFF");

  digitalWrite(13, LOW);

  delay(500); 

}

③その他Topics

3-1 PythonでStripを身に着けた。

これは使える。

data1 = "123.4 5423.2 162.10 1.0 0.9 20.3 0.01"
split_data = data1.split(" ")
print (split_data)
data1="123.0,456.5,0.8,1.0,9"
split_data = data1.split(",")
print (split_data[0])
add_0 = float(split_data[0]) + float(split_data[1])
print (add_0

3-2 Arduionのコメントは// Cと一緒

2021年9月1日水曜日

Raspberry PI GPIOのボタンを押した回数をGUIで表示

 2時間かかってここまでできました。






# coding: utf-8

import RPi.GPIO as GPIO

import time

import tkinter as tk


BUTTON_PIN = 27

count = 0


root = tk.Tk()

root.geometry("300x80")

lbl = tk.Label(text="ボタンを押した回数を数える")

lbl.pack()


def main():

    GPIO.setwarnings(False)

    # Set the layout for the pin declaration

    GPIO.setmode(GPIO.BCM)

    # BCMの21番ピンを入力に設定

    GPIO.setup(BUTTON_PIN,GPIO.IN) 

    # callback登録(GIO.FALLING:立下りエッジ検出、bouncetime:300ms)

    GPIO.add_event_detect(BUTTON_PIN, GPIO.FALLING, callback=callback, bouncetime=300)



    tk.mainloop()



 


def callback(channel):

  print("button pushed %s"%channel)

  global count

  count = count + 1

  dispLabel()


def dispLabel():

    global count

    lbl["text"] = (str(count) + "回押しました")



if __name__ == "__main__":

    main()

2021年6月2日水曜日

ラズパイをリモートデスクトップで繋ぐ。思った良り簡単だった。

 やっぱり、ラズパイをイチイチモニター等に繋ぐのは面倒くさい。

リモートデスクトップができると、ノートPCからアクセスできるし超便利。

それで試してみました。

引用元は、https://raspi.taneyats.com/entry/install-xrdp


先ずはベーシックなアップデート

sudo apt-get update

sudo apt-get upgrade

そして、xrdpをインストール

sudo apt-get install xrdp

sudo systemctl start xrdp

sudo systemctl enable xrdp   # 自動起動が不要な場合は実行しない

ラズパイコンフィグでもおまじない。

sudo raspi-config

2 Display Option > D4 Screen Blankingと選択していきます。

Would you like to enable screen blanking?

と聞かれますのでYesを選択してエンターキーを押します。設定が完了すると再起動を求められますので再起動します。


これで、完了。

普通にリモートデスクトップでIPアドレスを指定して、ログインするとできた!









2021年5月29日土曜日

Python Flask 2回目 

 2回目はフォームから入力してその反応を表示する。

目的としては、ラズパイに繋いだLCDにブラウザから入力した文字を表示させよう。

そのためにもWEBブラウザーで入力した文字を返す物を作ってみました。

ほかのPCからアクセスできるようにおまじないが必要なのが、あとから解った。

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


host='0.0.0.0'  こいつだった!

次はラズパイで動作確認かな。


from flask import *
app = Flask(__name__, static_folder='.'static_url_path='')
@app.route('/')
def index():
    return app.send_static_file('index_calc.htm')
 
@app.route("/lcd_disp1"methods=["post"])
def calc():
    a = str(request.form.get("a"))
   
    return "<h1>表示する文字は " + str(a) + "</h1>"  

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


同じフォルダに置くHTMLはこんな感じ index_calc.htm で保存

<!DOCTYPE html>

<html lang="ja">

<head>

    <title>Flask LCD Sample</title>

</head>

 <html><body>

    <form action="/lcd_disp1" method="post">

      <input type="text" name="a">

      <input type="submit" value="表示">

    </form>


入力した文字が表示される事ができました。


2021年5月23日日曜日

Python Flask 入門1回目

 まずはこのページを参照。

https://aiacademy.jp/media/?p=57

from flask import Flask
app = Flask(__name__static_folder='.'static_url_path='')
@app.route('/')
def index():
    return app.send_static_file('index.html')
 
app.run(port=8000debug=True)

こいつを実行すると同じフォルダにある index.html    が実行される。

localhost:8000 にアクセスが必要

これだけだとまだ難しいので下記サイトを見ると、少し理解できた。

https://news.mynavi.jp/article/zeropython-64/

# 必要なモジュールの取り込み
from flask import Flask

# Flaskオブジェクトの生成 --- (*1)
app = Flask(__name__)

# ルート( / )へアクセスがあった時の処理を記述 --- (*2)
@app.route("/")
def root():
    return "Hello"

# サーバーを起動 --- (*3)
if __name__ == "__main__":
    app.run(debug=True, port=8888)

「http://localhost:8888」にこいつは開かないとならない。

こんな使い方もあるのですね。

ここからはマイナビのサイトを参考に理解を進める。

from flask import *

# Flaskオブジェクトの生成
app = Flask(__name__)

# ルート( / )へアクセスがあった時 --- (*1)
@app.route("/")
def root():
    # HTMLでWebフォームを記述 --- (*2)
    return """
    <html><body>
    <form action="/calc" method="post">
      <input type="text" name="a"> ×
      <input type="text" name="b">
      <input type="submit" value="計算">
    </form>
    """

# フォームの値を受け取って結果を表示 --- (*3)
@app.route("/calc", methods=["post"])
def calc():
    a = int(request.form.get("a"))
    b = int(request.form.get("b"))
    r = a * b
    return "<h1>答えは..." + str(r) + "</h1>"    

# サーバーを起動
if __name__ == "__main__":
    app.run(debug=True, port=8888)

掛け算プログラムです。

こんな感じでpostを利用してpythonで計算して返す。

同じWebページで返すにはどうすりゃいいんだ?