2019年6月17日月曜日

pythonスクレイピングの覚書

chromedriver-binaryとcromeのバージョンは合っていないといけない

確認方法

$ pip3 show chromedriver-binary
Name: chromedriver-binary
Version: 76.0.3809.25.0
Summary: Installer for chromedriver.
Home-page: https://github.com/danielkaiser/python-chromedriver-binary
Author: Daniel Kaiser
Author-email: daniel.kaiser94@gmail.com
License: MIT
Location: /usr/lib/python3.8/site-packages
Requires:
Required-by:



# Chromeが75の場合
pip3 install chromedriver-binary==75.0.3770.8.0
 
# Chromeが76の場合
pip3 install chromedriver-binary 

参考にさせて頂きました
 

2019年6月13日木曜日

ESP32-CAM 農業用カメラを作る 15shutter

前回のフラッシュLEDがうっすらと点灯する件、なんとなく判明

回路図を良く見ると、LEDの点灯ポートは


「HS2_DATA1」という信号名(ArduinoではD4)。
で、SDカードの信号を良く見ると、


しっかり「HS2_DATA1」を使っている(笑)。
しかも47Kでプルアップされている。

いやいや、そんな結線ありえんだろ。と、テスタであたってみるも
しっかり導通。

そりゃうっすらと点灯するわなヽ《 ゚Д゚》ノ

GPIOをLにすれば消灯するし、Hにすれば点灯するけど、D4がINPUT設定に
なっていればこのプルアップが効いてくる。

何故Light-Sleep時にうっすら点灯するかは謎だが、どこかの処理で
D4をINPUT設定にしているのかも知れない。

さて、どうするか。
本来の「畑作物監視カメラ」という目的からすると
夜間撮影するわけでもないのでLEDは不要。

SDカードを使わないわけにも行かないし、LEDは
うっすらなら点いていても問題はないので放置でも
良いが、点灯させない方向で改造するか。

2019年6月12日水曜日

ESP32-CAM 農業用カメラを作る 14shutter

ESP32-CAMで
・撮影
・SDに連番で保存
というだけのスケッチを書いたのだが、何かがおかしい。

フラッシュの代わりのLEDがうっすら点灯した状態のままになる



いろいろいじってみると、どうもlight_sleepが影響しているみたい。


void loop() {
    digitalWrite(LED_FLASH, LOW);  //フラッシュLED消灯

    Serial.println("Captuer");
    digitalWrite(LED_FLASH, HIGH);  //フラッシュLED消灯
//撮影処理とりあえずコメントアウト    capture_save_jpeg(cnt++);
    digitalWrite(LED_FLASH, LOW);  //フラッシュLED消灯

    esp_sleep_enable_timer_wakeup(10*1000000); //10 seconds
    int ret = esp_light_sleep_start();

    Serial.println("Exit sleep");
}



上の処理だとうっすら点灯になるが、

void loop() {
    digitalWrite(LED_FLASH, LOW);  //フラッシュLED消灯

    Serial.println("Captuer");
    digitalWrite(LED_FLASH, HIGH);  //フラッシュLED消灯
//撮影処理とりあえずコメントアウト    capture_save_jpeg(cnt++);
    digitalWrite(LED_FLASH, LOW);  //フラッシュLED消灯

    delay(10*1000);
 

    Serial.println("Exit sleep");
}


これだと「点灯」→「消灯」を繰り返す。




LED自体は単純なFETのゲートでドライブされているので
中途半端な状態にはならないはずだが。

調査継続。




2019年6月4日火曜日

ESP32-CAM 農業用カメラを作る 13shutter

いきなりESP32-CAMを動かし始めたが、補足の情報を。

開発環境

開発環境(Arduino)は
https://qiita.com/Nabeshin/items/b195cad1afe99ce29f1e
ここが詳しいので参照願います。



回路図



フラッシュLED

フラッシュLEDの点灯方法
但し、点灯時200mAくらい電流が流れる。

    #define LED_FLASH  4  //FLASH LED

    pinMode(LED_FLASH, OUTPUT);
    digitalWrite(LED_FLASH, LOW);  //フラッシュLED消灯

    digitalWrite(LED_FLASH, HIGH); //フラッシュLED点灯

    digitalWrite(LED_FLASH, LOW);  //フラッシュLED消灯




2019年6月3日月曜日

ESP32-CAM 農業用カメラを作る 12shutter

いよいよESP32-CAMを使って撮影した画像を
SDカードに保存する。

いろいろNETを彷徨っているとこんなサンプルを発見

https://github.com/v12345vtm/CameraWebserver2SD/blob/master/CameraWebserver2SD/CameraWebserver2SD.ino

通常のサンプルはいろいろエラーが出て、動かすのに苦労があるのだが
このサンプルはいきなりOKだった。

WiFiの設定とNTPサーバーを国内のものに変更する

const char* ssid = "XXXXX";
const char* password = "PASS";
const char* ntpServer = "ntp.nict.jp"; //internet time server

RESETすると、シリアルポートに以下のメッセージ


ets Jun  8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1100
load:0x40078000,len:9232
load:0x40080400,len:6400
entry 0x400806a8
[D][esp32-hal-psram.c:47] psramInit(): PSRAM enabled

v12345vtm

[D][WiFiGeneric.cpp:336] _eventCallback(): Event: 0 - WIFI_READY
[D][WiFiGeneric.cpp:336] _eventCallback(): Event: 2 - STA_START
.[D][WiFiGeneric.cpp:336] _eventCallback(): Event: 4 - STA_CONNECTED
[D][WiFiGeneric.cpp:336] _eventCallback(): Event: 7 - STA_GOT_IP
[D][WiFiGeneric.cpp:379] _eventCallback(): STA IP: 192.168.200.109, MASK: 255.255.255.0, GW: 192.168.200.254
.
WiFi connected
Sunday, June 02 2019 16:57:14
 internet time ok

SD_MMC Card Type: SDHC
SD_MMC Card Size: 7600MB
Listing directory: /
  FILE: /.dropbox.device  SIZE: 56
Creating Dir: /mydir
Dir created
Listing directory: /
  DIR : /mydir
  FILE: /.dropbox.device  SIZE: 56
Removing Dir: /mydir
Dir removed
Listing directory: /
  FILE: /.dropbox.device  SIZE: 56
Writing file: /hello.txt
File written
Appending to file: /hello.txt
Message appended
Reading file: /hello.txt
Read from file: Hello World!
Deleting file: /foo.txt
[E][vfs_api.cpp:135] remove(): /foo.txt does not exists or is directory
Delete failed
Renaming file /hello.txt to /foo.txt
File renamed
Reading file: /foo.txt
Read from file: Hello World!
[E][vfs_api.cpp:64] open(): /sdcard/test.txt does not exist
1048576 bytes written for 2274 ms
Total space: 7582MB
Used space: 762MB
Starting web server on port: '80'
Starting stream server on port: '9601'
Camera Ready! Use 'http://192.168.200.109' to connect , de stream zit op een andere poortkanaal 9601
stream Ready! Use 'http://192.168.200.109:9601/stream
image Ready! Use 'http://192.168.200.109/capture


画像が欲しいので、
http://192.168.200.109/capture
にアクセスすると以下のメッセージが表示され、ブラウザに
1600x1200の画像が表示された。

lijn493
lijn496 pixformatjpg for httpd send
fb lengte=
106073
Writing file: /capture.jpg
succes to open file for SDwriting552
Writing file: /info.txt
File written
0
JPG: 106073B 978ms



SDカードの内容はこんな感じ


Textファイルはテスト的に作成されたものの様。

ここまで出来ていると、もう先が見えてきた。
偉大な先人に感謝。

まだスケッチ内容を理解していないが、

  • WiFi関連の削除
  • 定期的にCaptuerを実行
  • 余計なTextファイルを作らない
  • FTPによる画像ファイルの送信

を追加する事になる。


ところでNTP設定は何のために使っているんだろう



2019年6月2日日曜日

畑 3畝目

毎週日曜日の家庭菜園
先週植えたスイカがあまり育っていない


ズッキーニは巨大



なすときゅうりがぼちぼち採れ始めた。


2019年5月31日金曜日

ESP32-CAMのWiFiの相性

ESP32-CAMのテストで手持ちのWiFiルーターをAPとして
使おうとしたらつながらない。

通常使っているスマホとかAPには
つながる
  • ZTE MF98N  WiFiルーター × (WPA-PSK)
  • HAUWAI P20 PRO  スマホ ○ (WPA-PSK)
  • BUFFALO AirStationPro AP  ○ (WEP64)

もちろん、ZTEは通常使用出来ている
暗号化とかで微妙に違いがあるのだろうか?

ArduinoベースのESP32ではWiFi関連の細かい設定方法の
情報が少ないなぁ。
(そもそも技適が・・・・・)

継続調査!!

2019年5月30日木曜日

SIM7500JCのSMS

FTPからは外れるが、SIM7500のSMS機能を調べてみた。
もちろんSMSオプションのついたSIMである事が前提。


まず受信から。
普段使いのスマホからIIJの電話番号にSMSを送信する。


するとATコマンドのターミナルに次のようなメッセージが
表示される
-------------------------------------------


+CMTI: "SM",0
-------------------------------------------
これで受信を認識する。

次にメッセージの読み取り
以下は全メッセージの表示だが、個別に表示する事も
出来る
(スマホからは「test」というメッセージを送信した)
-------------------------------------------
AT+CMGL="ALL"

+CMGL: 0,"REC UNREAD","09026776837","","19/05/25,16:20:14+36"
test

OK
-------------------------------------------

逆にスマホへの送信は以下の様になる
(「TEST RETURN」を送信する)

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

AT+CMGS="09026776837"
> TEST RETURN

+CMGS: 13

OK
-------------------------------------------

スマホでも受信する事が出来た。

1回の通信毎にSMS料金が発生するので
常時の使用は出来ないが、緊急でRESETを
かけたりするには便利かもしれない。


2019年5月28日火曜日

直動機構によるロボット駆動

Youtubeで面白いのを見つけた。

https://www.youtube.com/watch?v=0BoPoWF_FwY&list=PLpwJoq86vov_PkA0bla0eiUTsCAPi_mZf


https://www.youtube.com/watch?v=0BoPoWF_FwY&list=PLpwJoq86vov_PkA0bla0eiUTsCAPi_mZf

BostonDynamicsとかガチでやっているところを除けば
いままでこの手のロボットはサーボモータ状のものが圧倒的に多かったと
思うが、やはり関節数+αのサーボモーターが必要となると
二の足を踏む。

モーターの数としては同じ位だし、モータドライバもその数分
必要だけれど、機構部分はシンプルになると思う。

4足歩行を前提とすれば、それぞれの関節の可動域はそれほど
広く無くてすみ、それならば180度可動のサーボモータを使用する
必要はない。

問題点としては
  • 直動->角度変化への変換機構が大変そう(ロックしないか)
  • 回転->直動なので速度が出せない?
  • 停止点を決めるセンサー(マイクロスイッチ)が関節毎に必要となる
が考えられるが、チャレンジしてみたいなぁ。

2019年5月27日月曜日

ESP32-CAM 農業用カメラを作る 11shutter

IIJに接続できたので、早速FTPアクセスを試してみる。


https://simcom.ee/documents/SIM7100E/SIM7100_FTP_Application_Note_V0.01.pdf
を参考に。

まずはFTPサーバーに接続する設定。
-------------------------------------------
AT+CFTPSERV="server.url"
AT+CFTPPORT=21
AT+CFTPMODE=1
AT+CFTPTYPE=I
AT+CFTPUN="username"
AT+CFTPPW="password"
-------------------------------------------
サーバー名、ユーザーID、PASSは当然秘密。

全てOKになったらまずはFTPサーバー上の情報を
取得
lsコマンドに該当するコマンドを送信

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

AT+CFTPLIST="/home/xxxxxx/"
OK

+CFTPLIST: DATA,1460
drwx------  29 xxxxx    users        4608 May 25 16:54 .
drwxr-xr-x 129 root     wheel        3072 Nov  1  2018 ..
-rw-------   1 xxxxx    users        2191 Apr 26 15:01 .bash_history

    中   略

drwx---r-x   2 xxxxx    users        1024 Dec  4  2016 yume
+CFTPLIST: 0
-------------------------------------------
無事に取得出来た。

次にサーバー上のファイルを取得してみる。
-------------------------------------------

AT+CFTPGET="/home/xxxxx/index.html"
OK

+CFTPGET: DATA,119
GET / HTTP/1.1
User-Agent: Wget/1.14 (freebsd9.1)
Accept: */*
Host: www.pipipi.net:20080
Connection: Keep-Alive



+CFTPGET: 0
-------------------------------------------
例としてTEXTファイルを取得したが、
BINの場合もそのまま垂れ流される?のだろうか。

そしていよいよバイナリデータを送信してみる。
サーバー上にtest.pngというファイルを作成する
前提です。

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

AT+CFTPPUT="/home/xxxxx/test.png"
+CFTPPUT: BEGIN

OK
-------------------------------------------
OKを受信したところで、データを送信する。
ここで若干嵌る。


送信の終了を指示する方法として
0x1aを送信するのだが、データ中の0x1aと区別する
為に0x1aを送信する場合は前に0x03を付加する。
つまり
0x1aは 0x03 0x1aとなる。

又、この0x03を区別する為にデータ中に0x03が存在した
場合も前に0x03を付加する。
つまり

0x03は0x03 0x03となる。

単純に画像ファイルを送信すれば良いのではなく、
1バイト毎にデータをチェックして上記の変換を
行う必要がある。


最後に0x1a(CTRL + Z)を送信するとサーバー上にファイルが作成された。

2019年5月26日日曜日

ESP32-CAM 農業用カメラを作る 10shutter

COMポートが見えたので、ATのCOM21(環境により番号は変わる)に
TeraTerm等で接続する。
パラメータはこんな感じ。ボーレートは何でもいいみたい。



AT[ENTER]と打つとOKが返ってくれば成功。



1.確認


確認用のコマンドを色々投げてみる

------------------------------------------
AT
OK
ATI
Manufacturer: SIMCOM INCORPORATED
Model: SIMCOM_SIM7500JC
Revision: SIM7500JC-OL_V1.1
IMEI: 8614780300*****
+GCAP: +CGSM

OK
AT+CNUM
+CNUM: "","090********",129


OK
AT+CSQ
+CSQ: 25,99

OK
AT+CPSI?
+CPSI: NO SERVICE,Online

OK
------------------------------------------
*** の部分は実際は数字
ATIコマンドのRevisionがSIM7500JC-OL_V1.1に
なっているのは大人の事情。(通常OLはつかない)

AT+CSQのレスポンスで
電波強度が15より大きくて、AT+CPSI?のレスポンスが
NO SERVICEになっているのはAPNが正しく設定できていない。

IIJのAPNは
  • APN:iijmio.jp
  • ユーザ名:mio@iij
  • パスワード:iij
  • 認証タイプ:PAPまたはCHAP
なので
------------------------------------------
AT+CGAUTH=1,3,"mio@iij","iij"
OK
AT+CGDCONT=1,"IP","iijmio.jp"
OK
AT+CGDCONT=6,"IP",""  <--おまじない
OK

AT+CGAUTH?
+CGAUTH: 1,3,"iij","mio@iij"
+CGAUTH: 2,0
+CGAUTH: 3,0


OK
AT+CGDCONT?
+CGDCONT: 1,"IP","iijmio.jp","0.0.0.0",0,0,0,0
+CGDCONT: 2,"IPV4V6","ims","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,0
+CGDCONT: 3,"IPV4V6","sos","0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0",0,0,0,1
+CGDCONT: 6,"IP","","0.0.0.0",0,0,0,0

OK
------------------------------------------
で、再度AT+CPSI?を送信すると

+CPSI: LTE,Online,440-10,0x117D,41201172,143,EUTRAN-BAND19,6100,3,3,-104,-888,-614,11

となり、無事にONLINEとなりました。

2019年5月25日土曜日

ESP32-CAM 農業用カメラを作る 9shutter

空いているSIMを探したらIIJのnanoSIMがあった。(解約忘れwww)
基板に載っているSIMスロットは標準SIMなので
変換カードを使用する。



マイクロSIM → nanoSIM → 標準SIMという変遷
基板に取り付けるとこんな感じ。



写真の真ん中辺に赤いPUSH SWがあるが、これがPOWER KEY信号につながって
いる。



LEDはSTATUS。
写真はPWRKEYを押下して起動した状態。

これでUSBポートとPCを接続すればCOMポートして見えるはず。
(ドライバインストール前提)


COM19からCOM23までがSIM7500JCのポート。
無事に認識したみたいです。

ドライバは代理店(キャセイトライテック)から入手できるのですが
インストールにちとコツがいるのでこちらを参考に。
https://github.com/botletics/SIM7500-LTE-Shield/wiki/USB-Drivers 

2019年5月24日金曜日

ESP32-CAM 農業用カメラを作る 8shutter

とにかくSIM7500JCのFTP転送を確認しないと先に進まない。
本業で作り散らかした残材を使って
  • SIM7500JC(モジュール版)
  • SIMカードスロット
  • 電源SW
  • STATUS LED
を載せた基板を作った。



シリアルポートは1.8Vのレベル変換が必要なので
USBの口だけ出す。
USBドライバを入れておけばいくつかのUSBシリアルの
ポートが現れ、そのうちの1つがATコマンドの口となる。

まずは100byteのデータ転送からだな。