2025年10月31日金曜日

UnoR4Tutorial12::(KXTC9-2050,TM1367,KeyPad) WbsctNdjsCfGo/C++

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

  1. micro:bit(block/js),
  2. picow-sunfounder,
  3. unoR4wifi-sunfounder,
  4. Esp32/Esp32cam-randomnerd
  5. PIC 後閑とモシニャガ
  • mit-app-inventor(block),
  • google-app-script(js)
  • php/golang//micro-python-3/mctp-c/ardu-c++/javascript-nodejs,
  • kaluma,johnny5,gobot,scratch3-mbit,xcratch-uno,dolittle-uno,
  • pictobox-esp32...,piper-picow...)
  1. pico(2f)-nrfでつかえるがscoppyに特化しそうだ
  2. Raspi4/3/0-randomnerd(2f),
  3. obniz(block/js)(2f)
  4. esp8266/01-randomnerd(2f),
  5. UnoR3・Nano-Esp01asAT-sunfounder(2f),

-----------------TM1367 4x7segment display very easy setup -----------------------

https://newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-tm1637-4-digit-7-segment-display

---------------KXTC9-2050 三軸アナログ加速度----------------------------------------

https://akizukidenshi.com/goodsaffix/AE-KXTC9-2050_20200428.pdf
V+ ピンと EN ピンを 3.3V に、GND ピンと ST ピンを GND(0V)に接続します。この状態で通常動作となります。各軸(X ピン、Y ピン、Z ピン)の出力を確認しましょう。基板を水平にした状態で X ピンと Y ピンの電圧が 1.65V 前後、Z ピン の電圧が 2.31V 付近であれば正常に動作しています。とあるが、すこしずれてた。手持ちは若干ヘタレ? ともあれ参考コードはうごいた。
---------------------keypad------------------------

https://newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-keypad-4x4

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

https://weseek.co.jp/tech/1484/ :: socket.ioをすこしづつ解説しておりわかりやすい  python,c++では難解だ goのほうがまし?   以下はgolangの例 https://qiita.com/urabexon/items/d02ffb6b4a10c9761c19 :: websocke-chat by golang

2025年10月28日火曜日

積み残し esp32・raspiOSbookwormのPython環境 (sht35)

 ESP32でウエブサーバするのなら、AsyncWebServerがよさげ(eps8266 also)



---------------------------------------------------------------------------------------https://kotamorishita.com/raspberry-pi-os-bookworm-python-venv/ 

ウブンツと微妙にちがっており有益な情報だった

基本的に仮想環境のなかのpip/pythonをつかえということだった

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

https://letraspberry.hatenablog.com/entry/2021/01/03/125846

Raspberry Pi 電子工作 03:温度・湿度センサー(I2C接続)

今回は、購入したセットに入っていた「SHT3X-DIS」というセンサーを使用します。

あっさり成功 dht系よりつかいやすい 抵抗不要 3.3v駆動

2025年10月24日金曜日

積み残し Websocket chat (node.js,python3)

https://qiita.com/shun_sakamoto/items/7944d0ac4d30edf91fde

venvで手軽にPythonの仮想環境を構築しよう 

以下のエラー対策は仮想環境しかない!

pip3 install asyncio error: externally-managed-environment

× This environment is externally managed

. env/bin/activate ./env/bin/pip3 install asyncio で成功!

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

https://qiita.com/youtoy/items/f74e4ae26a1b67c310c0 :: simple websocket echo server

--------------------echo server----------
import asyncio
import websockets

async def echo(websocket, path):
    print("クライアントが接続しました")
    try:
        async for message in websocket:
            print(f"受信: {message}")
            response = f"Echo: {message}"
            await websocket.send(response)
            print(f"送信: {response}")
    except websockets.exceptions.ConnectionClosed:
        print("クライアントとの接続が閉じられました")

async def main():
    # localhost の 8765 番ポートでサーバーを起動
    async with websockets.serve(echo, "localhost", 8765):
        print("WebSocketサーバーが起動しました")
        await asyncio.Future()  # 永久に待機

if __name__ == '__main__':
    asyncio.run(main())
-----------------------------------------------------
https://qiita.com/youtoy/items/ae1dd6ee36ac35c6e519 より
-----------------------client.py------------------------------------
import asyncio
from websockets.asyncio.client import connect

async def hello():
    async with connect("ws://localhost:8765") as websocket:
        await websocket.send("Hello world!")
        message = await websocket.recv()
        print(message)


if __name__ == "__main__":
    asyncio.run(hello())

https://qiita.com/youtoy/items/ae1dd6ee36ac35c6e519 はブロードキャスサーバもあり
ーーーーーーーーー

https://qiita.com/hikichi_shoto/items/f976970a114bab20325a flaskでチャット、有益
192.168.11.8:5002でアクセスしてチャットができた!

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

Node.jsでWebSocketサーバーを実装するには、wsのようなライブラリを使用します。このライブラリを使うと、クライアントの接続を待ち受け、接続されたクライアントと双方向でメッセージの送受信ができます。

サーバー側の実装(Node.js)
  1. ライブラリのインストール:
まず、wsライブラリをインストールします。
ソースコード
    npm install ws
  1. サーバーの作成と起動:
以下のコードをserver.jsなどのファイルに保存します。
JavaScript
    const WebSocket = require('ws');    // WebSocketサーバーをポート8080で起動します
    const wss = new WebSocket.Server({ port: 8080 });    wss.on('connection', function connection(ws) {
      console.log('Client connected');      // クライアントからのメッセージ受信時の処理      ws.on('message', function incoming(message) {
        console.log('received: %s', message);
        // 受信したメッセージを全クライアントにブロードキャストする例        wss.clients.forEach(function each(client) {
          if (client !== ws && client.readyState === WebSocket.OPEN) {
            client.send(`Broadcasting: ${message}`);          }        });      });      // 接続時の処理      ws.send('Something');      // 接続終了時の処理
      ws.on('close', () => {        console.log('Client disconnected');
      });
    });    console.log('WebSocket server started on port 8080');
クライアント側の実装(JavaScript)
ブラウザの開発者ツールや、HTMLとJavaScriptでクライアントを作成します。
ソースコード
<!DOCTYPE html><html><head>  <title>WebSocket Client</title></head><body>  <input type="text" id="messageInput" placeholder="メッセージを入力">
  <button id="sendButton">送信</button>
  <div id="output"></div>
  <script>
    const output = document.getElementById('output');    const messageInput = document.getElementById('messageInput');    const sendButton = document.getElementById('sendButton');    // WebSocketサーバーに接続    const ws = new WebSocket('ws://localhost:8080');    // 接続が成功した時の処理
    ws.onopen = () => {      output.innerHTML += '<p>WebSocket Connected</p>';    };    // サーバーからメッセージが送られてきた時の処理
    ws.onmessage = (event) => {      output.innerHTML += `<p>Received: ${event.data}</p>`;    };    // 接続が閉じた時の処理    ws.onclose = () => {      output.innerHTML += '<p>WebSocket Disconnected</p>';    };    // サーバーにメッセージを送信する関数    function sendMessage() {      const message = messageInput.value;
      ws.send(message);      output.innerHTML += `<p>Sent: ${message}</p>`;      messageInput.value = ''; // 入力欄をクリア    }    // 送信ボタンクリック時のイベント    sendButton.addEventListener('click', sendMessage);    // Enterキーを押したときに送信    messageInput.addEventListener('keypress', function(event) {      if (event.key === 'Enter') {        sendMessage();      }    });  </script>
</body></html>

2025年10月20日月曜日

積み残し Raspberry Pi cf Pico W aqm0802

-------------raspberry pi Blynk(PICOWは成功ずみ)------未踏------------------------

https://docs.sunfounder.com/projects/raphael-kit/ja/latest/python/play_with_python.html :: blynk

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

https://randomnerdtutorials.com/raspberry-pi-apache-mysql-php-lamp-server/

rootはpswd:rootにした cf sqlite3も入れた

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

 https://philkitty.hateblo.jp/entry/2023/09/05/213011 aqm1602のコードだが0802でも動いた


from machine import Pin, I2C
import time

# I2C の設定(GPIO16 端子を SDA, GPIO17 端子を SCL として使用、クロック 100kHz)
i2c = I2C(0,freq=100000,scl=Pin(17),sda=Pin(16))
# AQM1602 I2C デバイスのアドレス,AQM0802と一緒だったのでうごいた!
addr=0x3e
buf=bytearray(2)
# LM73 I2C デバイスのアドレス これは絶版
LM73_addr=0x4c
LM73_buf=bytearray(2)


# ************************************************************************/
#  AQM1602へコマンド送信
# ************************************************************************/
def write_cmd(cmd):
    buf[0]=0x00
    buf[1]=cmd
    # 7ビットアドレス 0x3e のペリフェラルに2バイトを書き込みます
    i2c.writeto(addr,buf)

# ************************************************************************/
#  AQM1602へデータ書き込み
# ************************************************************************/
def write_char(char):
    buf[0]=0x40
    buf[1]=char
    i2c.writeto(addr,buf)

# print 関数の名前を変更
def custom_print(str):
    for c in str:
        write_char(ord(c))
        

def LCD_cursor(x,y):
    #1段目に書き込み*/
    if y==0:
        write_cmd(0x80+x)
    #2段目に書き込み*/
    if y==1:
        write_cmd(0xc0+x)

def LCD_clear():
    buf[0]=0x00
    buf[1]=0x01
    i2c.writeto(addr,buf)
    time.sleep(0.001)

def LCD_home():
    buf[0]=0x00
    buf[1]=0x02
    i2c.writeto(addr,buf)
    time.sleep(0.001)

# ************************************************************************/
#  AQM1602の初期化設定
# ************************************************************************/
def LCD_init():
    orders = [b'\x38', b'\x39', b'\x14', b'\x73', b'\x56', b'\x6c',b'\x38', b'\x0c', b'\x01']
    time.sleep(0.04)
    for order in orders:
        # addr のメモリの、ペリフェラルのメモリアドレス 0で,orderを書き込みます
        i2c.writeto_mem(addr, 0x00, order)
        time.sleep(0.001)

# ************************************************************************/
#  LM73の初期化設定
# ************************************************************************/
def LM73_ini():
    LM73_buf[0]=0x04
    LM73_buf[1]=0x60    
    i2c.writeto(LM73_addr,LM73_buf)
    time.sleep(0.001)
    #ポイント・レジスタを0にしておく(readするだけで温度が読めるようになる)
    i2c.writeto(LM73_addr,b'\x00')
    time.sleep(0.001)
 
LCD_init()
LCD_clear()
LCD_home()
# LM73_ini()
custom_print('Hello Word')

while True:
    time.sleep(0.1)
    LCD_cursor(0,1)
    # スレーブアドレス LM73_addr のデバイスから 2バイトを読み出す
    # LM73_buf = i2c.readfrom(LM73_addr,2)
    #バイトデータを加工
    temp = ((LM73_buf[0]  << 6) | (LM73_buf[1] >> 2)); #データを結合して14ビットの温度値にする
    temp=temp* 0.03125; 
    custom_print(str(temp))
    time.sleep(0.5)

2025年10月18日土曜日

積み残し Micro:bit :: BLE & Maqueen

https://tomosoft.jp/design/?p=47415 

WebBluetoothを用いたmicro:bit ver2.21との通信 windowsで成功

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

----------------どうもラズパイとウブンツではBLEは鬼門?ーーーーーーーーーーーーーーー

 https://zenn.dev/kotaproj/articles/pi_microbit_kiso :: microbit and raspi  うごかず!

https://tomosoft.jp/design/?p=47415 ubuntuでだめ  ウィンドウズならOKだった不思議

--------------------MICRO:BITはMAQUEENが便利だがScratch同様カスタム化は困難------------

 https://learn.switch-education.com/microbit-tutorial/ micro:bit 基礎

https://sanuki-tech.net/micro-bit/appendix-sample-program/compass/

磁力計基礎 最初にキャリブレ必要だった BLEつかえるが無線機能には及ばん

https://supernove.hatenadiary.jp/entry/2021/03/10/014516 LEDサービスの例

BLEサービス
V2
加速度計サービス
MicroBitBLEService OK nrf etc
ボタンサービス
MicroBitBLEService ?
入出力端子サービス
MicroBitBLEService, MicroBitComponent ?
LEDサービス
MicroBitBLEService OK mit app
温度計サービス
MicroBitBLEService    OK nrf etc
磁力計サービス
MicroBitBLEService ?
UARTサービス
MicroBitBLEService OK nrf (MAQUEEN用に受信がつかえそう)


https://monomonotech.jp/kurage/webbluetooth/microbit_ble_block_uart_rx.html ::
 ble-uart受信サービスの例題 もし。。なら、部分一部改変でうごいた


https://monomonotech.jp/kurage/webbluetooth/microbit_ble_block.html は送信例
nordic connect(app)でtempが見れた ledサービスは、aを書き込むとaがでた!

----------------------------maqueen is great-------------------------------------------------------------

https://sanuki-tech.net/micro-bit/kit/remote-control-micro-maqueen/ 拡張機能からmaqueenをえらぶ ブロックのほうがわかりやすいがデバックがしにくい!ブリントデバッグで変数チェックが有効! Obniz,MITappInventorでは、もっと困難だろう

maqueen with ble


bluetooth.onBluetoothConnected(function () {
basic.showIcon(IconNames.Yes)
})
bluetooth.onBluetoothDisconnected(function () {
basic.showIcon(IconNames.No)
})
bluetooth.onUartDataReceived(serial.delimiters(Delimiters.NewLine), function () {
data = bluetooth.uartReadUntil(serial.delimiters(Delimiters.NewLine))
if (data.includes("f")) {
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CW, 90)
basic.pause(500)
maqueen.motorStop(maqueen.Motors.All)
} else if (data.includes("b")) {
maqueen.motorRun(maqueen.Motors.All, maqueen.Dir.CCW, 90)
basic.pause(500)
maqueen.motorStop(maqueen.Motors.All)
} else if (data.includes("t")) {
maqueen.motorRun(maqueen.Motors.M1, maqueen.Dir.CW, 90)
maqueen.motorRun(maqueen.Motors.M2, maqueen.Dir.CCW, 90)
basic.pause(500)
maqueen.motorStop(maqueen.Motors.All)
}
})
let data = ""
basic.showString("Hello!")
bluetooth.startUartService()
basic.forever(function () {
})


2025年10月16日木曜日

積み残し:: Google app script

 

--------------------以下未踏---------------------------------- 

https://www.lifenlogic.com/is-easy-nocode-preliminary/

https://qiita.com/Brutus/items/efbd5fda4c9316fc9e3b 

https://ex-ture.com/blog/2022/12/21/google-app-script%E3%81%A8google%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E9%80%A3%E6%90%BA%E3%81%95%E3%81%9B%E3%82%8B/ 

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

https://www2.kobe-u.ac.jp/~tnishida/programming/GAS-01.html など参照

// The code below will send an email with the current date and time.

function doGet(){
hot100();
}
;
const now = new Date();
GmailApp.sendEmail(
'fseigojp@gmail.com',
'current time',
`The time is: ${now.toString()}`,
);
function hot100(){
let url = "http://www.billboard-japan.com/charts/detail?a=hot100"; // 取得するページのURL。一度ブラウザで開いて見てみるといいでしょう。
let response = UrlFetchApp.fetch(url);
let text = response.getContentText(); // 取得したHTML文字列

let ss = SpreadsheetApp.getActive();
let sheet = ss.getSheetByName("Sheet1");

let pattern = /<p class="musuc_title">([^<>]*)<\/p>/g
let match;
while(match = pattern.exec(text)){
sheet.appendRow([match[1]]);
}
}

2025年10月15日水曜日

積み残し MIT app Inventor

 UnoR4WiFi(BLE,MQTT,WEBSOCKET)-sunfounder/newbiely,

PicoW(BLE,MQTT,WEBSOCKET)-sunfounder/randomnerd

UnoR3-Esp01orHC05-sunfounder,Obniz(html/js-nodejs) ,  

Mit-app-inventor2, Google app script,

cf pic-at(tv),esp32/8266/01-sunfounder/randomnerd

raspi4/3/0(2f),microbit(2f),pico-nrf,nano-nrf,

php/golang//micro-python/atmel-c/arduino-c++/javascript-nodejs,

ーーーーーーーーーーーーーー重要ーーーーーーーーーーーーーーーーーー

最新のmit app inventor2ではajaファイルの読み込みはcreate appsの次の画面でimport!

ちなみにaixはエクステンションぽい 昔fieldとなってたいのは今canvasになった

最新のmit app inventor2ではtimerコンポネントはsensorにはいっていた!

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

以下は未踏

「MIT APP INVENTOR2 の新しいコマンドを覚える」の人気の記事一覧|note ――つくる、つながる、とどける。 cf MIT App Inventor2 攻略WIKI 例題というよりマニュアル的


TUYANO LIBRO  for V1 not for V2 !

TinyDb(できた)、地図(できた) ballgame未踏

リンク集 – 日本App Inventorユーザー会 例題サイトたくさんあり!

 https://www.toolify.ai/ja/ai-news-jp/mit-app-inventor%E4%BD%BF%E6%96%B9%E5%AD%A6-593578 レイアウトが詳しい

https://appinventor.mit.edu/explore/ai2/clouddb-chat  
tinywebdbはgae必須にて最近はclouddbがよさげ、上記はそれを用いたチャットアプリ

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
bluetooth4(HC05)経由でArduino Uno R3のLed on of の記事
https://zenn.dev/suzuky/articles/b39dd588c89faa   下記その1
https://zenn.dev/suzuky/articles/c872429ced4841 下記その2
まったく嘘っぱちだった 以下のyoutubeが正解 
https://www.youtube.com/watch?v=w5LgLsCumFI を若干改変


------------------------timer----------------------------------------------------------------------



http://oda15singen.blog27.fc2.com/blog-entry-10.html タイマをつくる二日目を改変

文字列を数字にするには、文字列に+0をほどこす?未踏!

https://community.appinventor.mit.edu/t/text-not-converted-to-number/32547/2



ーーーーーーーーーーvideoーーーーーーーーーーーーーーーーーーーーー

MIT APP INVENTOR2 の新しいコマンドを覚える~ビデオ再生|門田和雄 



ーーーーーーーーーーーーーLOCATION(GPS) ーーーーーーーーーーーーーーーーーーー


LocationSensorとActivityStarterで、GPSを使ったマップ表示アプリ!(1/5):App InventorによるAndroid開発入門 - libro 上記で動いた!


上記を英語にしたのが下 英語になれんと使いにくいようだ      

MIT APP INVENTOR2 の新しいコマンドを覚える~リストピッカー|門田和雄 上記で成功

-------------------------------CANVAS-------------------------------------------------------------------------

canvasのつかいかたがわかる

https://note.com/robotakun/n/n121bce5fa7c4?magazine_key=m9d8797bf1b03



-----------------------------------------------------CAMERA------------------------------


https://note.com/robotakun/n/nd84ebb9dc82a カメラに成功 TINYDBも学べた

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

https://www.tuyano.com/index2?id=315001 これは総論的で前半はわかりやすい

mitappinventorで テキストを音声で読上げるスマホアプリを作ろう 

ボタンを押すとテキストボックスの文章をよみあげる!

MIT APP INVENTOR2 の新しいコマンドを覚える~音(サウンド)|門田和雄 

ボタンで音声ファイルの開始とストップができる 

ーーーーーーーーーー金子のballgame---------------------------------
FieldはCanvas,TimerはClockだった




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


方位ドロイドがぐるぐるしますが、すこし苦しそう。。。

https://www.youtube.com/watch?v=7fwaLLJn03M こっちがよさげ 未踏



ーーーーーBLE成功ーーーーーーーーーーーーーーーーーーーーーーーーーー
上記を参考に,sunfounderサイトのbleでled on/offを実現した
listはitemをダブリしてdragdropすると自動的に増える!

https://mit-cml.github.io/extensions/ ::ここにBLE&MICROBIT拡張機能aixがある
https://iot.edu2web.com/2017/07/12/arduino-101-3-bluetooth/ 上記の基本がある
注 sunfounder kit for Uno R4 のble1とble2はlight blueがセントラル,
ble3はmit app inventor ajaがセントラル






ーーーーーーーーーーーgoogleappscript for spread sheet-------------------------------

google sheet webapp必要 (obniz-webhookならいらんが) 
アンドロイドでなくマイコン情報をおくるにはマイコンにHC05をつけて
MitAppInventorにおくるのが良さげ(事前ペアリングが必要だが)Bleより簡単っぽい
これもうそっぱちだった、esp32のようにurl getで成功

https://docs.google.com/spreadsheets/d/1Ufw7WFvH0cO6dYgw-oglY_HW9tniHsvMlnrpC1i09j8/edit?gid=0#gid=0 がドキュメントurlとすると

https://script.google.com/macros/s/AKfycbwd4pEOJYmrORTIub1A11r_VwY8pOg29vbHYxeszab-DwCKqX2d3A8QtAmIaPyOkjCTbw/exec?name=seigo&location=tokyoで成功

function doGet(e) {
var ss=SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Ufw7WFvH0cO6dYgw-oglY_HW9tniHsvMlnrpC1i09j8/edit?gid=0#gid=0");
var sheet = ss.getSheetByName("Sheet1");
addUser(e,sheet);
}

function doPost(e) {
var ss=SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Ufw7WFvH0cO6dYgw-oglY_HW9tniHsvMlnrpC1i09j8/edit?gid=0#gid=0");
var sheet = ss.getSheetByName("Sheet1");
addUser(e,sheet);
}

function addUser(e,sheet){
var name = e.parameter.name;
var location = e.parameter.location;
sheet.appendRow([name,location]);
}


でMITappInventor 成功 ただしurlのexecをexec?になおす!


2025年10月14日火曜日

積み残しメモ:PICOW-websocket-sunfounder-controller cf Golang


ーーーーーgolangーーーーーーーーーーーーーーーー

https://zenn.dev/urakawa_jinsei/articles/0f162fb8dee08c :: simple webapp golang
https://learningift.com/blogs/sqhbApir1ib/go%E8%A8%80%E8%AA%9E%E3%81%A7%E8%B6%85%E7%B0%A1%E5%8D%98%E3%81%AA%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E9%96%8B%E7%99%BA%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F :: sqlite golang
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

-------------picow and sunfounder_controller -application------------------------
https://docs.sunfounder.com/projects/kepler-kit/ja/latest/pyproject/iotproject/9.sunfounder_controller.html :: wsckt-using
Hエリアにスライダーをおきサーボの角度指定をおこなう
Lエリアはゲージをおき超音波距離計の距離をcmで表示する
ws.py,ws-helper.pyが鍵 wifi設定はws.pyで行う

ここから未踏
https://docs.sunfounder.com/projects/kepler-kit/ja/latest/pyproject/iotproject/10.plant_monitor.html :: wsckt-using


積み残しObniz::AmbientNode/Cron,GooglSheet-UrlGETをMITappInでも

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

https://docs.obniz.com/ja/guides/  obniz 総論的サイト

https://docs.obniz.com/ja/reference/ 同様

https://blog.obniz.com/make/ これが一番具体的かな

省エネ水やりを改変して1分アラームを作成 !
setTimeout,clearTimeoutで挟むのが肝心のようだが理由がイマイチわからん.....
ネット環境がわるく電波が弱いときはうまくいかずbutton loginをもとめてくるので注意!


<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js"
integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q"
crossorigin="anonymous"
></script>
<script
src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js"
integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl"
crossorigin="anonymous"
></script>

<link
rel="stylesheet"
href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.1/css/bootstrap.min.css"
/>
</head>
<body>
<h3 id="bploading" style="text-align:center;">LOADING...</h3>
<div id="OBNIZ_OUTPUT"></div>
<br />

<script
src="https://unpkg.com/obniz@latest/obniz.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/iothome/index.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/airobot/index.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ui/index.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/howler2.1.2/howler.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/opencv3.4/opencv.js"
crossorigin="anonymous"
></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@4.19.0"> </script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/mobilenet@2.1.1"> </script>
<script src="https://cdn.jsdelivr.net/npm/@teachablemachine/image@0.8.5/dist/teachablemachine-image.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet@2.2.2"></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/clmtrackr/clmtrackr.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/clmtrackr/emotion_classifier.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/clmtrackr/emotionmodel.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/clmtrackr/model_pca_20_svm.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/ai/index.js"
crossorigin="anonymous"
></script>
<script
src="https://unpkg.com/obniz-parts-kits@0.18.0/storage/index.js"
crossorigin="anonymous"
></script>

<script>
let obniz = new Obniz("4998-4317");

//Timeout 25s
let tid = setTimeout(() => {
obniz.sleepMinute(720);
}, 25000);
obniz.onconnect = async () => {

let speaker = obniz.wired("Speaker",{"signal":0, "gnd":1});
speaker.play(262);;
await obniz.wait(10000); // awaitが必須
speaker.stop();

 obniz.sleepMinute(1);

 //program finish wait...
 await obniz.wait(1000); // なくてもうごくがあったほうが行儀がいい?
 clearTimeout(tid);

};
</script>
</body>
</html>
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Error: obniz=4998-4317 is connected from 1 clients (it's max). Disconnect others or extend limit. はObnizを再起動する必要あり

const Obniz = require("obniz");
const obniz = new Obniz("4998-4317");
const channelId = 95144;
const writeKey = '8c36be8526b33e9b';
var Ambient = require('ambient-lib');
var ambient = new Ambient(channelId,writeKey);

const get_data_send = async (lm35) => {
    const val = await lm35.getWait();;
    console.log(val);
    ambient.send({d1: val}, (err, res, body) => {
        if (err) {
            //console.log(err);
        }
        // console.log(res);
        console.log("sent");
    });
}

obniz.onconnect = async () => {
    var lm35 = obniz.wired("LM35DZ", { gnd:2 , output:0, vcc:1});

    get_data_send(lm35);

    setInterval(() => {
        get_data_send(lm35);
    }, 30 * 1000);  // 30 sec interval
}
ーーーーーーーーーvisual block programーーーーーーーーーーーーーーーーーーーーーー
https://docs.obniz.com/ja/guides/obniz-starter-kit/iot-by-block-programing/app-record-temp 定期的に温度測定ヴィジュアルブロックプログラミング(以下VBP)
ボードはスリープせずに10分ごとにCloudOSから起動されアプリステータスが更新される
ブラウザは開いていても開いてなくてもOK
なぜかVBPではsleep,webhook,procedureがうまくいかん。。。検討課題


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

オブニズで以下のように、するとblockプログラミングでもurl getに成功


blockでつかえる温度計(LM35)も期待!もともとwebhook url get用なので複雑なのは。。。

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

webhookを定期実行だがレガシースタイルのサーバレスイベント(Webアプリでなく)、
ニュースタイルは(Web)アプリ一択となった アプリ開発ではOBNIZ_ID_HERE一択である
https://blog.obniz.com/make/saving-temperature-logger-1y を参考にしよう
なんと2025年にはubuntu,that:googlesheetでうごかんようになってた。。。なんで?

ーーーーーーーーーーーgoogleappscript for spread sheet-------------------------------

https://docs.google.com/spreadsheets/d/1Ufw7WFvH0cO6dYgw-oglY_HW9tniHsvMlnrpC1i09j8/edit?gid=0#gid=0 がドキュメントurlとすると

https://script.google.com/macros/s/AKfycbwd4pEOJYmrORTIub1A11r_VwY8pOg29vbHYxeszab-DwCKqX2d3A8QtAmIaPyOkjCTbw/exec?name=seigo&location=tokyoで成功

function doGet(e) {
var ss=SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Ufw7WFvH0cO6dYgw-oglY_HW9tniHsvMlnrpC1i09j8/edit?gid=0#gid=0");
var sheet = ss.getSheetByName("Sheet1");
addUser(e,sheet);
}

function doPost(e) {
var ss=SpreadsheetApp.openByUrl("https://docs.google.com/spreadsheets/d/1Ufw7WFvH0cO6dYgw-oglY_HW9tniHsvMlnrpC1i09j8/edit?gid=0#gid=0");
var sheet = ss.getSheetByName("Sheet1");
addUser(e,sheet);
}

function addUser(e,sheet){
var name = e.parameter.name;
var location = e.parameter.location;
sheet.appendRow([name,location]);
}


でMITappInventor 成功 ただしurlのexecをexec?になおす!


2025年10月13日月曜日

UnoR4Tutorial 10 (Websocket半分眠る) cf HC05,GPS module

https://newbiely.com/tutorials/arduino-uno-r4/arduino-uno-r4-websocketを改変

UnoR4WiFi_WebServerでLIB検索失敗 Web Server for Arduino UNO R4 で成功

画面をよくみること INDEX.Hは画面のとおりに入れること

うまく動くと,WS://192.168.11.42:81とでるのでHTTP://192.168.42で接続

ただし、クライアント同士のあれこれはできん nodejsでは以下のように、かるチンなんだが

cf https://qiita.com/takayuki-nakamura/items/5bee265e130d7354dc72

超簡易的なチャットアプリを作りWebSocketについての理解を深める by nodejs


https://qiita.com/att55/items/da663f6e713c3bd073e8 
本格チャットアプリ nodejs 未踏

WebSocket Test Client :クローム拡張が必須

ーーーーーーーーHC05-------unoR3--------------------------------

MIT app inventorでHC05と連携する記事も参照のこと

https://burariweb.info/electronic-work/arduino-bluetooth-module-hc05-hc06.htmlで

手持ちのHC05をチェックするとbaurd rate 9600に設定されていた 以下でLED制御に成功

#include <SoftwareSerial.h> 

SoftwareSerial BTserial(4,5);  // RX,TX

int BTint = 0;

 void setup() 

{

  pinMode(LED_BUILTIN, OUTPUT);

  BTserial.begin(9600);

}

 void loop()

{

    if (BTserial.available())

    {  

        BTint = BTserial.read();

        if(BTint == '1'){

          digitalWrite(LED_BUILTIN, HIGH);

        } else if(BTint == '0'){

          digitalWrite(LED_BUILTIN , LOW);

        }

    } 

    delay(200);

}

ーーーーーーーGPSーunoR3ーーーーーーーーーーーーーーーーーーーーーー

 https://omoroya.com/arduino-lesson68/#toc10 UNO R3で緯度、経度が

StateNum=4 LAT=34.345378緯度 LNG=134.092559経度 ALT=38.40 SPEED=2.02 とでた

https://zenn.dev/megeton/articles/14e867dbc1ad11にTinyGPSあれこれが書いていた

#include <TinyGPS++.h> // TinyGPSPLUSでインストOKだった
#include <SoftwareSerial.h>

const int P_RX = 8; //Arduinoで受信するピンの設定
const int P_TX = 7; //設定するが接続しない

TinyGPSPlus gps;                 //gpsというオブジェクトの作成
SoftwareSerial mySS(P_RX, P_TX); //mySSというオブジェクトの作成

void setup() {
  Serial.begin(9600); //シリアル通信のスピード(ボーレート)を設定
  mySS.begin(9600);   //mySSシリアル通信のスピード(ボーレート)を設定
}

void loop() {
  //データが有効であれば読み出し
  while (mySS.available() > 0){
    if (gps.encode(mySS.read())){
      //Serial.println("gps start");
      display_monitor();
    }
  }
}

void display_monitor() {

  //GPS情報が正常に更新されていたら表示
  if (gps.location.isUpdated()) {

    //年、月、日、衛星数、緯度、経度、高度、対地速度の表示
    Serial.print(gps.date.year());  // 年 (2000+) (u16)
    Serial.print("-");
    Serial.print(gps.date.month()); // 月 (1-12) (u8)
    Serial.print("-");
    Serial.print(gps.date.day());   // 日 (1-31) (u8)
    Serial.print(" SateNum=");
    Serial.print(gps.satellites.value()); //衛星数
    Serial.print(" LAT=");
    Serial.print(gps.location.lat(), 6);  //緯度
    Serial.print(" LNG=");
    Serial.print(gps.location.lng(), 6);  //経度
    Serial.print(" ALT=");
    Serial.print(gps.altitude.meters());  //高度
    Serial.print(" SPEED=");
    Serial.print(gps.speed.kmph());       //対地速度
    Serial.println(" ");
  }
}

2025年10月12日日曜日

UnoR4 Tutorial 9(joystick) &led-matrix(MAX7219)

 keypad,servo....

---------------------joystick------------------------------

x軸とy軸はanalog readのため、反応時間がやや遅いのでdelayを選ばんとうまくいかん 
z軸はswitch on offのdigital read

--------------------------------------LED MATRIX MODULE ---------------unoR3------------------
MAX7219::https://workshop.aaa-plaza.net/archives/2285#toc2 

2025年10月6日月曜日

街道をゆく

  1.  甲州街道、長州路ほか ○
  2. 韓のくに紀行 ○
  3. 陸奥のみち、肥薩のみちほか ○
  4. 郡上・白川街道、堺・紀州街道 ○ 注:最初は洛北のみちと呼ばれてた
  5. モンゴル紀行 ○
  6. 沖縄・先島への道 ○
  7. 甲賀と伊賀のみち、砂鉄のみちほか ○
  8. 熊野・古座街道、種子島みちほか ○
  9. 信州佐久平みち、潟のみちほか ○
  10. 羽州街道、佐渡のみち △。。
  11. 肥前の諸街道 ○
  12. 十津川街道 ○ 
  13. 壱岐・対馬の道 ○
  14. 南伊予・西土佐の道 ○
  15. 北海道の諸道 ○
  16. 叡山の諸道 ○
  17. 島原半島、天草の諸道 ○
  18. 越前の諸道 ○
  19. 中国・江南のみち ○
  20. 中国・蜀と雲南のみち ○
  21. 神戸・横浜散歩、芸備の道  ○ 手持ちは12となっていた、装丁ミスか?
  22. 南蛮のみちI ○
  23. 南蛮のみちII ○
  24. 近江散歩、奈良散歩 ○
  25. 中国・閩のみち ○
  26. 嵯峨散歩、仙台・石巻 ○
  27. 因幡・伯耆のみち、檮原街道 ○
  28. 耽羅紀行 ○
  29. 秋田県散歩、飛騨紀行 △。。
  30. 愛蘭土紀行I ○
  31. 愛蘭土紀行II ○
  32. 阿波紀行、紀ノ川流域 △
  33. 白河・会津のみち、赤坂散歩  ○
  34. 大徳寺散歩、中津・宇佐の道 ○
  35. オランダ紀行 ○
  36. 本所深川散歩、神田界隈 △。。
  37. 本郷界隈 △。。
  38. オホーツク街道 ○
  39. ニューヨーク散歩 ○
  40. 台湾紀行 ○
  41. 北のまほろば ○
  42. 三浦半島記 ○
  43. 濃尾参州記 ◯