2022年7月26日火曜日

esp32 isr,atp3011/bluetooth / isd 1820 recording / dfplayer

isr interrupt service routineにはハードウエア(GPIO,TouchSensor)とソフトウエア(WDT、タイマー)の4種あり

ESP32 GPIO割込みテスト - JH7UBCブログ (goo.ne.jp) 

ESP32の静電容量タッチインターフェースを使ってLチカ - Qiita

WatchdogTimer (fc2.com) はバグあり、 ARDUINO_ISR_ATTRはIRAM_ATTRに!

Arduino-ESP32 WatchDogTimer - Qiitaを参考に)

タイマー割り込みはバイブルのとおり

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

atp3011:: esp32でも動いたぞ!Nanoでも動いた!

esp8266はだめ。ラズピコ、シャオピコもだめ。ラズパイは動くらしいがそのまま音でる!

Unocloneでは単三x3の補充が正解だった。単三x4はだめ!日本語LSIが壊れる!

#include <SoftwareSerial.h>

SoftwareSerial softSerial(2,4); //RX, TX

void setup() {

  softSerial.begin(9600);

  softSerial.print("?");

}

void loop() {

  softSerial.print("ie'----i\r");

  delay(2000);

}

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

 ESP32とBluetoothSerialで文字列を送受信する - Qiitaで手軽にできた

つぎにdrv8835と連携してみる バイブルにあったarduino bluetooth controllerでも

操縦できた(bluetooth serial terminalはもちろんOKだった)

--------------------------isd 1820 recording module-----------------------

まず、電池 単三x3 で、Recで10秒録音して

ISD1820 レコーディングモジュールの使用方法 - 電子工作入門 - 基礎からの IoT 入門 (keicode.com) を参考にして、PLをHighにしてdelayかけてLowにすると再生できた

動作電圧も5v直接でOKだった(分圧必要と書いてあるが、Amazon商品で3~5Vだった)

ーーーーーーーーーdfplayer miniーーーーーーーーーーーーーーーーーー

小型のMP3プレーヤーモジュールDFPLayerの使い方 - hrendoh's tech memo

アルディーノ系の解説、未体験状態!

【Raspberry Pi Pico】UART通信でDFPlayerを制御する – マイコン技術Navi (ekit-tech.com) 

mp3/0001.mp3と命名しないと成功しなかった!ラズピコは3vから取ること!

xiao rp2040は5vからとること!

ーーーーーーラズピコの場合ーーーーーーーーーーーーーーーーーーー

from machine import UART,Pin

uart=UART(1,baudrate=9600,tx=Pin(4),rx=Pin(5))

sdata=bytearray([0x7E,0xFF,0x06,0x01,0x00,0x00,0x00,0xEF])

uart.write(sdata)

xiao rp2040は以下のようにUARTを変更して成功

# ハードウェア関連のライブラリを読み

from machine import Pin,UART

import utime


# UART初期設定(UART番号,クロックレート,TXピン:GP4/6Pin,RXピン:GP5/7Pin)

# uart = UART(1,baudrate=9600,tx = Pin(4),rx = Pin(5)) # for pico

uart = UART(0,baudrate=9600,tx = Pin(0),rx = Pin(1)) # for xiao


# シリアルデータの作成(一曲だけを再生)

#sdata = bytearray([0x7E,0xFF,0x06,0x01,0x00,0x00,0x00,0xEF]) # 01::next command


# 曲を指定して再生

# コマンド:0x03(ダイレクト再生コマンド)

# 下位ビット:0x02(曲の番号を指定)

sdata = bytearray([0x7E,0xFF,0x06,0x03,0x00,0x00,0x02,0xEF])

# シリアルデータの送信

uart.write(sdata)

utime.sleep(3)

# command : 0x0E is pause

sdata = bytearray([0x7E,0xFF,0x06,0x0E,0x00,0x00,0x00,0xEF])

uart.write(sdata)

utime.sleep(2)

# command : 0xD is playback

sdata = bytearray([0x7E,0xFF,0x06,0x0D,0x00,0x00,0x00,0xEF])

uart.write(sdata)

utime.sleep(3)

# command : 0x0A is standby

sdata = bytearray([0x7E,0xFF,0x06,0x0A,0x00,0x00,0x00,0xEF])

uart.write(sdata)

CMD Function Description     Parameters(16 bit)
0x01 Next 0x02 Previous 0x03 Specify tracking(NUM)     0-2999 0x04 Increase volume 0x05 Decrease volume 0x06 Specify volume                 0-30 0x07 Specify EQ(0/1/2/3/4/5) Normal/Pop/Rock/Jazz/Classic/Base 0x08 Specify playback mode (0/1/2/3) Repeat/folder repeat/single repeat/ rando

0x09 Specify playback         source(0/1/2/3/4) U/TF/AUX/SLEEP/FLASH 0x0A Enter into standby – low power loss 0x0B Normal working 0x0C Reset module 0x0D Playback 0x0E Pause 0x0F Specify folder to playback     1~10(need to set by user) 0x10 Volume adjust set     {DH=1:Open volume adjust }{DL: set volume gain 0~31} 0x11 Repeat play             {1:start repeat play}{0:stop play}

2022年7月24日日曜日

espr2 softap receiver and raspico sender via uart

 Raspberry Pi Picoに無線機能を付けてみました - 自由に工作中 (hatenablog.com)

センダー間隔を4秒にとらずに原本のように1秒にとると、とても反応が鈍くなる

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

#define WIFI_SSID "your-ssid"  //ネットワーク名。各自入力する
#define WIFI_PWD "your-password" //パスワード。各自入力する

ESP8266WebServer server( 80 );
IPAddress ip( 192, 168, 10, 1 );
IPAddress subnet( 255, 255, 255, 0 );

void setup() {

  WiFi.mode(WIFI_AP);
  WiFi.softAPConfig(ip, ip, subnet);  
  WiFi.softAP(WIFI_SSIDWIFI_PWD);
  Serial.begin(115200);
    
  server.on("/", [](){ // 無名関数の利用、以下の定義により5秒ごとにブラウザ更新
    
  String str = "";  
  String msg = ""; 
  int strlen = 0;
  String str_send = "";
            
   if ( Serial.available() ) {
       {  
       str = Serial.readStringUntil(';');  //「;」を検出したら終了 
       str += Serial.readStringUntil(';');  //「;」を検出したら終了
       strlen = str.length();
       str_send = str.substring(str.length()-5,str.length()); //データ抽出
              
       };
  
  }
    msg += "<!DOCTYPE html>";
    msg += "<html><head>";
    msg += "<meta http-equiv='refresh' content='5'>"; //5秒おきに更新
    msg += "<title>Sensor</title><body>";
    msg += "<font size='5'>" + str  + "</font>"; 
    msg += "<br>";
    msg += "<font size='5'>" + str_send  + "</font>"; 
    msg += "<br>";
    msg += "</body></html>";
    server.send(200, "text/html", msg);
  
  });
 
  server.begin();

}

void loop() {
  server.handleClient();
}


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

from machine import UART, Pin
import time

PIN_ADC = 26
VREF = 3.3
adc = machine.ADC( PIN_ADC ) 

uart0 = UART(0, baudrate=115200, tx=Pin(12), rx=Pin(13))

while True:
    value = adc.read_u16()
    volt = (value /65535 * VREF)
    voltx = "{0:.3f}".format(volt) + ";" #ケタ数を揃えて;を追加
    time.sleep(4)

   #原本では1だが、uartのバッファリングが効いて5秒ごとの更新で途中経過も全部でる

   #4秒ごとにしておくと、そこそこの表示となるようだ


    uart0.write(voltx)

2022年7月16日土曜日

https_get::arduinoIDE for esp32 only,micropython for esp32 and esp8266 OK

2022年9月現在ではesp8266のhttps getはfinger-printがいるげな よって却下

https://micropython-docs-ja.readthedocs.io/ja/latest/esp8266/tutorial/intro.html 

これはesp8266用のmicropy

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

 https://garretlab.web.fc2.com/arduino/esp32/examples/WiFiClientSecure/WiFiClientInsecure.html

https:://blog.livedoor.jp/sce_info3-craft/archives/9551267.html を参考に

#include <WiFiClientSecure.h>


const char* ssid     = "";     // your network SSID (name of wifi network)

const char* password = ""; // your network password


const char* server = "fseigojp.web.fc2.com"; // "www.google.co.jp"など

const char* path = "https://fseigojp.web.fc2.com/"; // サーバー名に続くパス, "/"から始める


WiFiClientSecure client;


void setup() {

  //Initialize serial and wait for port to open:

  Serial.begin(115200);

  delay(100);


  // Wi-Fiに接続

  Serial.print("Attempting to connect to SSID: ");

  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    Serial.print(".");

    // wait 1 second for re-trying

    delay(1000);

  }

  Serial.print("Connected to ");

  Serial.println(ssid);


  // サイトにアクセス

  Serial.println("\nStarting connection to server...");

  client.setInsecure(); //ここが重要で要追加だった

  if (!client.connect(server, 443))

    Serial.println("Connection failed!");

  else {

    Serial.println("Connected to server!\n");

    // Make a HTTP request:

    client.println("GET " + String(path) + " HTTP/1.1");

    client.println("Host: " + String(server)); // HTTP1.1で必須のヘッダ, アクセス先サーバーとしておく(そうしないとクロスドメインアクセスになる)

    client.println("Connection: Keep-Alive");

    client.println();


    if (client.connected()) {

      // ヘッダの受信

      Serial.println("--- Header ---");

      while (1) {

        String line = client.readStringUntil('\n');

        Serial.println(line);

        if (line == "\r") {

          break; // ヘッダの末尾は\r\nだからそこで終了

        }

      }

      // ボディの表示

      Serial.println("--- Body ---");

      while (client.available()) {

        char c = client.read();

        Serial.write(c);

      }

    }

    client.stop();

  }

  Serial.println("\n\nfinish.");

}


void loop() {

  // do nothing

}

ーーーーーmicropython at esp32 and esp8266  ーーーーーーーーーーーーーーーーーーー
https://qiita.com/kotaproj/items/96a61031aefd1bba9cc8 これはesp32仕様だが
まったく同じコードがespr8266でも動いた!

import network
import time
import urequests as requests

# 接続するアクセスポイント情報
SSID = ""
PASS = ""

def do_connect():

    wlan = network.WLAN(network.STA_IF)
    wlan.active(True)
    if not wlan.isconnected():
        print('connecting to network...')
        wlan.connect(SSID, PASS)
        while not wlan.isconnected():
            time.sleep(1)
    print('network config:', wlan.ifconfig())

    return


do_connect()


# url = "https://www.example.com/"
url = "https://fseigojp.web.fc2.com/"
response = requests.get(url)
print(response.text)
response.close()

2022年7月14日木曜日

micro:bit latest :: drv8835の共用は問題あり、マクインの底のRGB

 通常のdrv8835などのドライバを37用の拡張ボードにつないで気づいたのだが

5v仕様の端子0,1,そして多分2以外はdigital writeがうまくいかん 

表示マトリックスとの共用のせい?  

ーーーーーーーーーーーーーーーーーーーーーーーーー
sanuki tech netを参照、Pin15に4個のneopixel stripが割り当て