エントリー

カテゴリー「マイコン」の検索結果は以下のとおりです。

【技術メモ】Lubuntu 18.04 のモニター設定でハマった記録【Linux】

化石パソコンなんで、ほとんど需要はないと思うけど、自分用にメモしておく。

工人舎SH8をSSD化してみたが、LinaxのLubuntuのインストールでハマった。

20210511101726.png

現象を確認してみる

USBからインストールしたまでは良かったが、モニターがデフォルトの800×600のまま変更できない現象が発生。

 システムの設定でモニタを1024×600に設定すると、再起動時にブラックアウトして全く先に進めなくなる。

しばらく放置(30分ほど)するとlogin画面が現れるが、ログインするとブラックアウト。

あれこれ試す

電源投入後にEscキーを押してリカバリーモードで起動して、GUIfilsafaxしてみたけど、全く効果なし。もちろんほかのコマンドも試したけどダメ。
USBから起動すると問題なく起動するので、ソフトウェアの問題であることは間違いない。

ブラックアウトしたあと、alt+Ctr+F1でCUIモードを試すと入れた。
単純にGUIが表示されないだけと断定。

これまで、あれこれ弄くったので、再インストールすることにした。

再インストール後に、tarminalを開いて $xranr コマンドで状態を調べる。

$ xrandr

20210511101719.png

入力後に出力された情報

Screen 0: minimum 8 x 8, current 800 x 600, maximum 32767 x 32767
LVDS1 connected primary 800x600+0+0 (normal left inverted right x axis y axis) 433mm x 271mm
   1024x600      60.00 +
   1024x576      59.82  
   960x540       59.63    59.82  
   800x600       60.32    56.25  
   864x486       59.92    59.57  
   640x480       59.94  
   720x405       59.51    58.99  
   640x360       59.84    59.32  
   512x300       60.00  
TV1 disconnected (normal left inverted right x axis y axis)
TV2 disconnected (normal left inverted right x axis y axis)
TV3 disconnected (normal left inverted right x axis y axis)
TV4 disconnected (normal left inverted right x axis y axis)
VGA1 disconnected (normal left inverted right x axis y axis)
VGA2 disconnected (normal left inverted right x axis y axis)
VIRTUAL1 disconnected (normal left inverted right x axis y axis)
  1024x600 (0x4b) 45.000MHz +HSync +VSync
        h: width   800 start 1034 end 1064 total 1200 skew    0 clock  37.50KHz
        v: height  600 start  601 end  606 total  625           clock  60.00Hz

 1024x600      60.00 + と表示されているので、ドライバーは問題なく読み込んでいるようだ。
xrandrのGUIを疑い始める。

Tarminalから次のコマンドを入力してみる。

sudo xrandr --output LVDS1 --mode 1024x600

記述では auto でも良いようだが、あえてSH8の標準サイズを指定してみた。

1024×600表示になった

20210511101721.png

うまくいきました。

しかし、再起動すると800×600に逆戻り・・・・

プロファイルへの書き込みが必要みたい。xprofileに書けばいいのかな。
上記のコマンドで1024×600へ変更した後にシステムからXrandrモニタの設定を覗くと、設定が1024×600に変更されてたので「保存」ボタンをクリック。

20210511102805.png

xprofileが上書きされたみたい。

再起動すると、ログイン後に1024×600になりました~ 

前にインストールした時はこんなことは無かったのに何で??? ネットに接続しないでインストールしたのに??

メモ

スタートアップで設定すると間違いないみたい。
そのうちやってみよう。

https://wiki.archlinux.jp/index.php/Xrandr

ヒント: KDM と GDM には X が初期化されたときに実行されるスタートアップスクリプトが存在します。GDM の場合、スクリプトは /etc/gdm/ にあり、KDM の場合、スクリプトは /usr/share/config/kdm/Xsetup、SDDM の場合、/usr/share/sddm/scripts/Xsetup です。この方法は root 権限を必要とし、システムの設定ファイルを弄る必要がありますが、起動プロセスでは xprofile よりも早く設定が適用されます。

参考サイト

【Ubnutu】リカバリーモードで起動する方法【18.04】

【ESP32-CAM】自作タイムラプスカメラを安定化してみる【書き込みエラー】

ESP32-CAMを使って超省電力型のタイムラプス装置を作ってみたが、動作が安定しない。
500枚撮影してエラーが無いこともあるし、10枚撮影してエラーになることもある。
なんで?

20210207120851.jpg

奇妙なエラーコード

[E][camera.c:1049] camera_probe(): Detected camera not supported.
[E][camera.c:1249] esp_camera_init(): Camera probe failed with error 0x20004

ようするに、ESP32-CAMのカメラモジュールに対して「検出されたカメラはサポートされていません」ってことなんだけど、撮影できることもあるので何とも判断がつかない状況。

困ったときのgithub

この手の情報って日本語のサイトはあまりないので頼りになるのがgithubです。
全文英語表記ですが、翻訳機能と単語でなんとか読むことが可能。
世界中のESP32-CAM利用者が参加している。

電源周りを変更してみる

フォーラムの情報を見ると、ピンの設定でも起こるということだが、何度見てもピンの設定は間違っていないしそもそも撮影できないはず。

よって、怪しいのはESP32-CAMに接続されている、電源周りが怪しいようだ。
PCのUSB供給だと安定しないので、電源を別にするといいらしい。

20210207120852.jpg

昇圧モジュールで5.2vを確保。これならPCよりはるかに電源が安定するはず。

20210207120853.jpg

バッテリーはリチウムイオン電池の18650をセット。

結果

 何回かテストしているが、確実に前よりは動作は安定した。効果は出ていると言える。

どうも、deepsleepモードは復帰時の電源供給に問題があるようだ。撮影時間を短くして(とはいっても電池で1週間は持つと思われる)もsleepさせない方法を考えた方が良いのだろうか??

 

 

【ESP32-CAM】タイムラプス用のカメラを自作してみた。【Time Lapse】

Twitterを見てたら、タイムラプスの映像があったので、やってみようかと・・・
動画の再生スピードを上げる手法もあるんだろうけど、長時間の撮影には向かないよね。

20210223085112.jpg

機材を考えてみた

専用のカメラなら確実に映像が撮れるのだろうが、意外と高い。
耐久性もあって,4Kで撮れるのは捨てがたい。


 

次に、古いスマホの利用を検討してみた。
使用しているスマホを使うと、撮影中は使用できないため却下。古いスマホにアプリをインストールして使用する方法もあり。

20210223090947.png

参考:タイムラプス用アプリ

しかし、スマホも消費電力が大きいので長時間の撮影には少し無理があるような気がする。

いずれにしても、消費電力は大きく1日程度の撮影なら可能だろうが、それ以上は難しいだろう。低コストでコンパクトかつ省電力のものというとなかなか見つからない。

ESP32-CAMを使ってみた

 ESP32-CAMはカメラ機能のほかにWIFIモジュールやSDカードスロットも装備されており、電源をつなげば単体で稼働可能。しかも超軽量で超コンパクト。

楽天だと少し高いが、ほかならもう少し安く買うことができる。なぜか値段が大きく上がった?ちなみに所有しているモジュールはこんなに高くなかった。


 

  • ESP32 スペック
    • デュアルコア Tensilica LX6 マイクロプロセッサ
    • 最大クロック 240MHz
    • 520KB RAM
    • 4MB Flash メモリ
    • 802.11 b/g/n Wi-Fi
    • デュアルモード Bluetooth (classic and BLE)
    • ハードウェアアクセラレーションによる暗号化 (AES, SHA2, ECC, RSA-4096)
  • CP2104 USB-UART変換ドライバ
  • OV2640 カメラセンサー
    • 出力フォーマット(8-bit):
      • YUV(422/420)/YCbCr422
      • RGB565/555
      • 8-bit 圧縮データ
      • 8/10-bit RAW RGB データ
    • 最大画像転送レート
      • UXGA/SXGA: 15fps
      • SVGA: 30fps
      • CIF: 60fps
    • スキャンモード: Progressive
  • カメラ スペック
    • 視野 : 65 度
  • 最大解像度: 200万画素(メモリの都合上、本ユニットは最大800 * 600 pixels JPEG)
  • サイズ: 20.5 × 46.5 × 11.5mm

タイムラプスのプログラムを書いてみた

以前に作ったWEBカメラのコードを使う。前回は取得したデータをWifiで転送する方法だったが、それをSDカードに書き込むように変更する。

設定方法やwebストレージに保存する方法はこちら

とりあえず書きなぐったコードはこちら

#include "SD.h"
#include "esp_camera.h"
#include "soc/soc.h"
#include "soc/rtc_cntl_reg.h"
#include "FS.h"
#include "SD.h"

//SD Card Pins
#define sd_sck  14
#define sd_mosi 15
#define sd_ss   13
#define sd_miso  2

// read and write from flash memory
#include <EEPROM.h>

// define the number of bytes you want to access
#define EEPROM_SIZE 1

#define PWDN_GPIO_NUM     32
#define RESET_GPIO_NUM    -1
#define XCLK_GPIO_NUM      0
#define SIOD_GPIO_NUM     26
#define SIOC_GPIO_NUM     27

#define Y9_GPIO_NUM       35
#define Y8_GPIO_NUM       34
#define Y7_GPIO_NUM       39
#define Y6_GPIO_NUM       36
#define Y5_GPIO_NUM       21
#define Y4_GPIO_NUM       19
#define Y3_GPIO_NUM       18
#define Y2_GPIO_NUM        5
#define VSYNC_GPIO_NUM    25
#define HREF_GPIO_NUM     23
#define PCLK_GPIO_NUM     22

int pictureNumber = 0;
int mySN = 0;
char myFname1[4];
char myFname2[4];

void setup()
{
  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);
 
  Serial.begin(115200);
  delay(10);

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
 
  config.frame_size = FRAMESIZE_VGA;  // UXGA|SXGA|XGA|SVGA|VGA|CIF|QVGA|HQVGA|QQVGA
  config.jpeg_quality = 10;
  config.fb_count = 1;
 
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    delay(1000);
    ESP.restart();
  }

   // initialize EEPROM with predefined size
    EEPROM.begin(EEPROM_SIZE);
    pictureNumber = EEPROM.read(0) + 1;
    EEPROM.write(0, pictureNumber);
    EEPROM.commit();

// LED Pin Mode
    pinMode(33, OUTPUT);

}

void loop() {
      digitalWrite(33,LOW);
      delay (1000);
      saveCapturedImage();
      
      digitalWrite(33,HIGH);

      delay(180*1000); //待機間隔 秒
}

void saveCapturedImage() {

  camera_fb_t * fb = NULL;
 
  // Take Picture with Camera
    Serial.println(" ");
    Serial.println("Take Picture ");
    fb = esp_camera_fb_get();  
 
  // Path where new picture will be saved in SD Card
    Serial.println("Save SD Card");

  // Get File Name
  if (mySN == 999){

    EEPROM.begin(EEPROM_SIZE);
    pictureNumber = EEPROM.read(0) + 1;
    EEPROM.write(0, pictureNumber);
    EEPROM.commit();

    mySN = 1;
    }else{
     mySN = mySN + 1;
    }

    sprintf(myFname1, "%03d",pictureNumber);
    sprintf(myFname2, "%03d",mySN);

    String path = "/p" + String(myFname1)+"_"+ String(myFname2) +".jpg";

    Serial.printf("Picture file name: %s\n", path.c_str());

      SPI.begin(sd_sck, sd_miso, sd_mosi, sd_ss);
      SD.begin(sd_ss);
 
    File file = SD.open(path.c_str(), FILE_WRITE);
    file.write(fb->buf, fb->len);

    file.close();
   
    esp_camera_fb_return(fb);
    Serial.println("complete");
}

SDカードの書き込みでハマる

SDカードのライブラリが2種類あってかなりハマったw
sd.hとsd_MMC.h どうもSD_MMCの場合、GPIO4がカメラのフラッシュと重なっているようで、アクセスするたびにLEDが点灯する。
対策が面倒だったので、素直にsd.hを使ってみた。おおまかな違いは、sd.hだと書き込み速度が遅いこととファイル名が8文字+拡張子3文字に制限されるようです。

ファイル名について

 普通に変数を書いたら電源をオンオフするたびにファイル名が1から始まってしまうので、ひと工夫してみた。
EPROM()関数を使って、電源が落ちてもESP32-CAMに実装されているロムにファイル情報を書き込んでみた。256バイトまで使えるみたい。
 これにより0〜255までの256通りの数字を保持できる。255以上の数字を記録したいのであれば、アドレスを分けて10進数で計算させてやればできると思う。
今回はそこまで必要がないのでパス。

とりあえずタイムラプス用カメラが完成

loop()に放り込んで、deray()で撮影時間を調整しているが、これだと待機電力が無駄になっているので、何か別な方法を考えてみたい。

超軽量、コンパクトサイズのタイムラプスカメラが完成した。
20210223120132.jpg

まあまあの出来だった。
ただし、delay()で待機時間を制御しているため、待機中の電力消費が気になるところかな。

20210223103913.gif

100円ショップでミニ三脚を買ってこよう。

【技術メモ】Arduino Thinary を使うときのボードの設定【ArduinoIDE】

格安ボードのThinaryをarduinoIDEで使うための設定メモ。

20201215085024.jpg

https://www.aliexpress.com/item/32864165819.html

このボード、小型で格安。

ボード情報が無いため、メモしておく。

ArduinoIDEの設定

20210216115934.png

  • ボード → Arduino Nao
  • プロセッサ → ATmega32p (old bootloader)

部品的には古いため、oldbootloaderを選択する。意外とつまづく。

スケッチを書き込む

20210216115933.png

スケッチが書き込めたら完了。

【Arduino】ESP32 Devkitc v4 をリナックス(ubuntu)で書き込んでみた【技術メモ】

  1. はじめに

linux(ubuntu)でArduinoUNOやArduinoNanoなどの書き込みは成功していたが、ESP32だと書き込めなかったので、設定してみた。
ここでは、Lubuntuをにインストールしてみます。

20210121143719.png

ボードのインストール

ArduinoIDEを開いてCtrl+、を押すと設定画面が展開します。
そこのボードに「https://dl.espressif.com/dl/package_esp32_index.json」を追加します。

20210216124612.png
ツール>ボード>ボードマネージャ 検索で「ESP32」と入力
ボードが表示されたらインストール。

コンパイル開始

サンプルを適当にesp32に書き込むと次のエラーが表示された。

exec: "python": executable file not found in $PATH
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました

どうやら、Pysonモジュールが入っていないようです。

http://arduino-er.blogspot.com/2020/06/install-esp32esp8266-to-arduino-ide-on.html

LXTerminalを起動し、コマンドを順番に入力。

$ sudo apt install python-is-python3
$ sudo apt-mark hold python2 python2-minimal python2.7 python2.7-minimal libpython2-stdlib libpython2.7-minimal libpython2.7-stdlib

20210511101725.png

2番めは、古いpysonがインストールされないようにするためらしいのですが不要かと思われ混る。 

再度コンパイル

ImportError: No module named serial
exit status 1
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。

またエラー

pipモジュールが入っていないからでるらしい。
んで、pipとpyserialを追加。

$ sudo apt install python3-pip
$ pip3 install pyserial

ESP32の書き込みテスト

ESP32DevKITCの場合は、ボードの「ESP32 dev modul」を選択。

20210121143718.png


ボードの選択で
ファイル>スケッチ例>ESP32 から適当なスケッチ例を開いて書き込んでみる。

heard resetting via RST pin ..... 

と表示されれば成功です。

だめなときは

ダメなときは次のコマンドを実行してみる。

  • $ sudo apt install python-pip
  • $ sudo pip install pyserial

ページ移動

  • ページ
  • 1
  • 2
  • 3
  • 4
  • 5

ユーティリティ

サイト内検索

twitter

ありがとうございます

新着画像

過去ログ

Feed