2023年5月29日月曜日

Obnizあれこれ,Mjpg-streamer どこそこ

obnizではスマホのテザリングでwifi設定しておくとスマホからいじれる

freespotでもホットスポット経由にwifi設定すればいい

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

https://raspi-katsuyou.com/index.php/2020/06/30/11/10/44/644/ これはブルーバックスと
同じだが、ブルーバックスは全コマンドを/opt以下にmvしたので、10-02-stream.shを使用!

単純にヴィデオクリップするのならguvcviewがいい パイカメラの場合はv4l2をいれんと?
USBウェブカメラ(マイク付き)なら録音もできるからベターかも

https://gihyo.jp/admin/serial/01/ubuntu-recipe/0303

https://mekou.com/linux-magazine/web%e3%82%ab%e3%83%a1%e3%83%a9%e6%92%ae%e5%bd%b1guvcview/






































Raspi64bitOS::keyboard日本語化,legacycam,radicon 

https://raspida.com/keyboard-set-raspi-config

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

Libcameraコマンド群(スティルとかヴィデオとか)

https://hellobreak.net/raspberry-pi-bullseye-libcamera/ に詳しい

64ビットOSになってOSがBullseyeになったためらしい

最新OS64ビットではraspistillは廃止 libcameraになっていた

https://www.indoorcorgielec.com/resources/raspberry-pi/camera-setup/ にくわしい

https://stackoverflow.com/questions/27777547/missing-libmmal-so-with-picamera-library やにこい しかもpicameraはまだ64bit対応していないだとか。。。

撮影と録音はwebcam-with-microphoneでいくしかない 

ーーーーー python3 motor-server.py --------------------------

from http.server import HTTPServer, BaseHTTPRequestHandler

import motor

import RPi.GPIO as GPIO

class MotorServerHandler(BaseHTTPRequestHandler):

    # get access

    def do_GET(self):

        path = self.path

        print("path=", path)

        body = "ok"

        if path == "/":

            f = open("motor-client.html", encoding='utf-8')

            body = f.read()

            f.close()

        if path == "/forward":

            motor.forward()

        elif path == "/back":

            motor.backward()

        elif path == "/left":

           motor.lturn()

        elif path == "/right":

           motor.rturn()

        elif path == "/stop":

            motor.stop()

        else:

            print("command unknown")

        self.send_response(200)

        self.send_header('Content-Type', 'text/html;charset=utf-8')

        self.end_headers()

        self.wfile.write(body.encode('utf-8'))

try:

    #server start

    addr = ('', 8081)

    httpd = HTTPServer(addr, MotorServerHandler)

    print("server start on port 8081")

    httpd.serve_forever()

except KeyboardInterrupt:

    pass

httpd.socket.close()

GPIO.cleanup()

ーーmotor.pyーーーーーーーーーーーーーーーーーーーーー

import RPi.GPIO as GPIO
#from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(24,GPIO.OUT)
GPIO.setup(25,GPIO.OUT)
GPIO.setup(20,GPIO.OUT)
GPIO.setup(21,GPIO.OUT)

p0=GPIO.PWM(24,50)
p1=GPIO.PWM(25,50)
p2=GPIO.PWM(20,50)
p3=GPIO.PWM(21,50)
p0.start(0)
p1.start(0)
p2.start(0)
p3.start(0)

def forward():
    p0.ChangeDutyCycle(0)
    p1.ChangeDutyCycle(70)
    p2.ChangeDutyCycle(0)
    p3.ChangeDutyCycle(70)
    #sleep(0.5)
def backward():
    p0.ChangeDutyCycle(70)
    p1.ChangeDutyCycle(0)
    p2.ChangeDutyCycle(70)
    p3.ChangeDutyCycle(0)
    #sleep(0.5)
def rturn():
    p0.ChangeDutyCycle(70)
    p1.ChangeDutyCycle(0)
    p2.ChangeDutyCycle(0)
    p3.ChangeDutyCycle(70)
    #sleep(0.5)
def lturn():
    p0.ChangeDutyCycle(0)
    p1.ChangeDutyCycle(70)
    p2.ChangeDutyCycle(70)
    p3.ChangeDutyCycle(0)
    #sleep(0.5)
def stop():
    p0.ChangeDutyCycle(0)
    p1.ChangeDutyCycle(0)
    p2.ChangeDutyCycle(0)
    p3.ChangeDutyCycle(0)
    #sleep(1)
----------------motor-client.html--------------------------------------------------

<!DOCTYPE html><html><head><meta chatset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="https://code.jquery.com/jquery-3.1.1.min.js"></script>
<style> button { font-size:30px; border-radius:6px;  } </style>
</head><body style="text-align:center; font-size:30px;">
<script>
  function send(cmd) { $.get(cmd); $('#msg').html(cmd); }
</script><p>
  <button onclick="send('forward')">↑</button><br>
  <button onclick="send('left')">←</button>
  <button onclick="send('stop')">□</button>
  <button onclick="send('right')">→</button><br>
  <button onclick="send('back')">↓</button><br>
  <p id="msg"></p>
</p></body></html>
----------------------------------------------------------



2023年5月10日水曜日

esp32-cam-robot

 https://qiita.com/Nabeshin/items/1ad8ab0f0f66472a2325 :: esp32-cam-robo

192.168.0.12でブラウザできる!

const char ssid[] = "ESP32-NET"; const char pass[] = "Espressif_dev";

//CAM Robot Configurations #define FLASH_GPIO_NUM 4 #define MOTOR_A1 12 #define MOTOR_A2 13 #define MOTOR_B1 14 #define MOTOR_B2 15





前準備 結線は

USB-TTLコンバータ モジュール側ESP32-CAM 側
5V5V (3.3V端子を接続時は不要)
GNDGND
RXDU0TXD (GPIO1)
TXDU0RXD (GPIO3)
3.3V3.3V(5V端子を接続時は不要)
GPIO0 (CSI_MCLK) - GND を短絡する
(書き込み時のみで、実行時は解除する)
接続端子

※5V、3.3Vの電源は、供給可能な電源のどちらかのみを接続します。
※ESP32-CAMモジュール本体のGPIO0 - GNDを短絡しますが、
 この短絡処理は、スケッチの書き込み時のみに必要です。
 そのため実行時には、この短絡を解除します。


  • CAMERA_MODEL_WROVER_KIT をコメントアウト
  • 代わりにCAMERA_MODEL_AI_THINKERを有効化。
ボードESP32 Wrover Module
Partition SchemeHuge App(3MB No OTA)
Flash ModeQIO
Flash Frequency80MHz   Upload Speed  921600




2023年5月4日木曜日

obniz and microbit uart相互

https://news.mynavi.jp/techplus/article/makeprogram-30/


 ---------------receiver :: obniz ---------------
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<script src="https://unpkg.com/obniz@latest/obniz.js" crossorigin="anonymous"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/iothome/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/ai/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/airobot/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/ui/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/ai/opencv3.4/opencv.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.5"> </script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@0.2.2"> </script>
</head>
<body>
Micro:bit Serial
<div id="OBNIZ_OUTPUT"></div><br/>
<script>
(async function(){
var obniz;
obniz = new Obniz('5312-1232');
await obniz.connectWait();
obniz.io2.output(false);
obniz.uart0.start({rx:0, tx:1});
obniz.uart0.onreceive=function(data,text){
console.log(data[0]+":"+data[1]+">"+text);
}
})();
</script>
</body>
</html>

------------------sender :: microbit --------
serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
serial.writeNumber(input.lightLevel())
basic.pause(1000)
})


----------------- sender :: obniz ------------------------------------
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://obniz.io/js/jquery-3.2.1.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css" integrity="sha384-WskhaSGFgHYWDcbwN70/dfYBj47jz9qbsMId/iRN3ewGhXQFZCSftd1LZCfmhktB" crossorigin="anonymous">
<script src="https://unpkg.com/obniz@latest/obniz.js" crossorigin="anonymous"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/iothome/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/ai/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/airobot/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/ui/index.js"></script>
<script src="https://unpkg.com/obniz-parts-kits@0.11.2/ai/opencv3.4/opencv.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.5"> </script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@0.2.2"> </script>
</head>
<body>
Micro:bit Serial
<div id="OBNIZ_OUTPUT"></div><br/>
<script>
(async function(){
var obniz;
obniz = new Obniz('5312-1232');
await obniz.connectWait();
obniz.io2.output(false);
obniz.uart0.start({rx:0, tx:1});
obniz.uart0.send("microbit+obniz");
})();
</script>
</body>
</html>
------------------------- receiver:: microbit --------------------------------

serial.redirect(
SerialPin.P0,
SerialPin.P1,
BaudRate.BaudRate115200
)
basic.forever(function () {
    basic.showString(serial.readString()    )
})