ラベル Arduino の投稿を表示しています。 すべての投稿を表示
ラベル Arduino の投稿を表示しています。 すべての投稿を表示

2020年6月7日日曜日

宅配ボックス開閉通知 IFTTT

Amazonが置き配をデフォにして、しかもそれがAmazon使うのやめようかと思うほどユーザー無視の仕様><;

なにが問題かと言うとおき配指定した場合ヤマトや佐川はピンポンしてくれるんだけど日本郵政やAmazon配送となっているわけわからない配送業者はピンポンしてくれない><;いてもいなくてもピンポンせずに強制おき配。

頼んだものが2便に分かれてしまった場合あとから届いたものは宅配ボックスにすでに鍵がかかっているということで持ち帰られてしまう><;

ということで、宅配ボックスにものが入ったらピンポンがなるIoTを作ろうとしたわけです^^;

1年ほどArduinoから離れていたせいかなにをやってもうまくゆかない><;現象としては途中で暴走リセットしている模様…

Serial.print() しただけで USB 接続が切断され /dev/ttyUSB0 と /dev/ttyUSB1 が交互に切り替わるって、意味が分からない><;この問題に悩まされること3ヶ月!やっと原因を見つけた!原因は「USB3.0ハブ」アマゾンで買ったんだけどこいつ経由だと駄目。本体のUSBポートに直接繋ぐと正常に動くようになった><;

いやはや、実際こいつを買って以降、Arduino関連では書き込みできなかったり散々な目にあっていました><;

愚痴はここまで

正常に制御できるようになったレ簡単なプログラムすぐできた\(^_^)/

ESP-WROOM-02 にマグネットスイッチを付けただけ、超簡単。


さてと、基盤むき出しは信頼性低すぎなんで3Dプリンターでケース作ります。^^;

参考になるかわかりませんがソースも置いておきます。

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "SSID";
const char* password = "password";
const char* IFTTT_KEY = "KEY";

#define TIMEOUT (5 * 1000 * 1000)

const char* eventOpen = "open_box";
const char* eventClose = "close_box";

int last = -1;
int count = 0;

void setup()
{
  Serial.begin(115200);
  Serial.println("Start 115200");

  pinMode(D3, INPUT_PULLUP);  // magnetic switch
  pinMode(D4, OUTPUT);        // built in LED
  last = digitalRead(D3);

  // 再起動サイン
  for (int i = 0; i < 20; ++i) {
    digitalWrite(D4, i & 1);
    delay(200);
  }

  // WiFi
    delay(500);
  Serial.print(F("\n\nConnecting to "));
  Serial.println(ssid);
  int error_count = 0;
  WiFi.begin(ssid, password);
  // Wifi接続成功 待ち
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(F("."));
  }
  Serial.print(F("\nWiFi connected\n"));
  Serial.println(WiFi.localIP());
}

void loop()
{
  // 内蔵LED点滅
  digitalWrite(D4, count & 1);
  delay(10);

  // 磁気スイッチ読み取り
  int val = digitalRead(D3);
//  Serial.printf("cnt: %d, switch: %d, value: %d\n", count, count & 1, val);

  // 変化した?
  if (last != val) {
    // 変化したのでIFTTTのWebトリガーを呼ぶ
    if (val) {
      triggerIfttt(eventOpen, "open", "", "");
    } else {
      triggerIfttt(eventClose, "close", "", "");
    }
  }

  last = val;
  ++count;
  delay(1000);
}

/**
 * IFTTT へ WebTrigger
 * @param const char* event
 * @param char* value1
 * @param char* value2
 * @param char* value3
 */
boolean triggerIfttt(const char* event, char* value1, char* value2, char* value3)
{
  BearSSL::WiFiClientSecure client;
  client.setTimeout(500);
  client.setInsecure();

  // 接続
  if (!client.connect("maker.ifttt.com", 443)) {  // IFTTTへ接続確認
    Serial.println(F("ERROR: https connect"));    // エラー出力
    error();
    return false;
  }
  Serial.printf("https connected\n");    // エラー出力

  // リクエスト送信
  char* format =
    "GET /trigger/%s/with/key/%s?"
    "value1=%s&value2=%s&value3=%s HTTP/1.1\r\n"
    "Host: maker.ifttt.com\r\n"
    "User-Agent: ESP8266\r\n"
    "Connection: close\r\n\r\n";
  client.printf(format, event, IFTTT_KEY, value1, value2, value3);
  Serial.printf("Send web trigger");

  // 応答待ち
  unsigned long start = micros();
  while (client.available() == 0) {
      if ((micros() - start) > TIMEOUT) {
          Serial.println(">>> Client Timeout !");
          client.stop();
          error();
          return false;
      }
  }
  Serial.printf("Recive responce");

  // レザルトの受け取り
  while(client.available()) {
      String line = client.readStringUntil('\r');
      Serial.print(line);
  }
  return true;
}

void error()
{
  for (int i = 0; i < 40; ++i) {
    digitalWrite(D4, i & 1);
    delay(50);
  }
}

2018年11月1日木曜日

ESP32 にて謎のエラー

ちょっと前に ESP32 を使った Blynk アプリを作りました。
久しぶりに動かすことになったのですが一部仕様追加があったので修正してコンパイルしようとしたら謎のエラーが><;

Traceback (most recent call last):
  File "/home/kiya/.arduino15/packages/esp32/tools/esptool/2.3.1/esptool.py", line 34, in
    import serial
ImportError: No module named serial
「WiFi.h」に対して複数のライブラリが見つかりました
使用済:/home/kiya/.arduino15/packages/esp32/hardware/esp32/1.0.0/libraries/WiFi
未使用:/usr/local/arduino-1.8.7/libraries/WiFi
exit status 1
ボードESP32 Dev Moduleに対するコンパイル時にエラーが発生しました。

え〜。WiFi.h が複数あったっていいじゃん!で、調べてみるとこのメッセージは関係ないようです。

ESP32 ( ESP-WROOM-32 , M5Stack )自分的 トラブルシューティング まとめ

警告をすべてオンにして再コンパイルしても何も変わらず…で、エラーメッセージをしげしげ見るとどうやら esptool.py がエラーを出しているよう。

ということで下記を実行して無事コンパイルできました。

$ sudo apt install python-pip
$ pip install pyserial

Ubuntu 17.10 を 18.04 にアップグレードしたのですがどうも調子が悪いのでクリーンインストールしたのでその際必要なモジュールが不足してしまったようです。

2018年7月3日火曜日

Digistump の Digispark Kickstarter という ATTINY85 を使った安価で小さなマイコンがあります。これの上位互換品で Digispark Pro というのを試してみたところ、ちょっと悩んだので備忘録。

プレス機のカウンター信号(単なるオン/オフスイッチ)をスマホで受け取るというセンサーを作成することになりどうしようかなと思ったのですが、信号そのものが出ていない機械だとホール効果センサーを付けるとか、将来的にはその他のセンサーもつなぎたいとのことだったので間にマイコンをかますことにしました。

とりあえず、Pro Micro という Arduino Leonardo 互換のちっちゃいやつで試してみまして、簡単にできました。これでもいいのですが Digispark Kickstarter でも十分かなと思い試そうとしたのですが、部品箱を見ると在庫切れ><;

よく見ると似て非なるものが何個か出てきた。なんかピンが多い…で、調べてみると Digispark Pro という Digispark Kickstarter の上位互換品。んじゃ、取り合えずこれで試すかと簡単なプログラム書いて書き込もうとしたらわけのわからないワーニングが大量に出て書き込めない><;

最大14844バイトのフラッシュメモリのうち、スケッチが958バイト(6%)を使っています。
グローバル変数は9バイトのRAMを使用しています。
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)Warning: device with unknown new version of Micronucleus detected.
This tool doesn't know how to upload to this new device. Updates may be available.
Device reports version as: 2.0

いろいろ調べてみたところ、下記のページに解決策が書かれていました。
(私の環境ではライブラリのヘッダが足りなくてコンパイルが通りませんでしたが…)

Warning: device with unknown new version of Micronucleus detected.


1. 書き込みツールのダウンロード


$ cd ~/temp
$ wget https://github.com/micronucleus/micronucleus/archive/master.zip

2. 展開


$ unzip master.zip

3. コマンドラインツールのソースフォルダに移動


$ cd micronucleus-master/commandline/

4. コンパイル


$ make
make: libusb-config: Command not found
Building library: micronucleus_lib...
gcc  -Ilibrary -O -g -D LINUX -c library/micronucleus_lib.c
In file included from library/micronucleus_lib.c:30:0:
library/micronucleus_lib.h:32:10: fatal error: usb.h: そのようなファイルやディレクトリはありません
 #include <usb .h>
          ^~~~~~~
compilation terminated.
Makefile:55: recipe for target 'micronucleus_lib' failed
make: *** [micronucleus_lib] Error 1

# usb.h が見つからないというエラーが出ました><;

5. usb.h の含まれるパッケージを探す


$ sudo apt-get install apt-file
$ sudo apt-file update
$ apt-file search /usr/include/usb.h
libusb-dev: /usr/include/usb.h

6. libusb-dev をインストール


$ sudo apt install libusb-dev

7. 再度コンパイル


$ make
Building library: micronucleus_lib...
gcc  -Ilibrary -O -g -D LINUX -c library/micronucleus_lib.c
Building library: littleWire_util...
gcc  -Ilibrary -O -g -D LINUX -c library/littleWire_util.c
Building command line tool: micronucleus...
gcc  -Ilibrary -O -g -D LINUX -o micronucleus micronucleus.c micronucleus_lib.o littleWire_util.o -L/usr/lib/x86_64-linux-gnu -lusb
rm -f *.o

8. 出来上がったファイルの確認


$ ll micronucleus
-rwxr-xr-x 1 kiya kiya 55K  7月  3 11:05 micronucleus

9 .複写先の確認(すでに存在したらリネームするため)


$ ll ~/.arduino15/packages/digistump/tools/micronucleus/2.0a4
-rwxrwxrwx 1 kiya kiya 19K  2月 13  2016 launcher
-rwxr-xr-x 1 kiya kiya 55K  7月  3 11:10 micronucleus

10. すでに存在するのでバックアップ


$ mv ~/.arduino15/packages/digistump/tools/micronucleus/2.0a4/micronucleus micronucleus.2.0a4

11. 複写


$ cp micronucleus ~/.arduino15/packages/digistump/tools/micronucleus/2.0a4

これで書き込めるようになりました。

2018年6月4日月曜日

Arduino Uno の電源

Arduino Uno を使った場合は基本的に実験が主になるので、いままで電源はほとんど USB からの供給でした。なので全然気にしていませんでしたが、先日、プラレールのRC化をした際電池駆動を試してみたところ VIN への 5V 供給ではうまく動かなかったので調べてみた備忘録です。

Arduino への電源供給


1. USB 端子

こいつは何も考える必要はないかな^^;

2. VIN

DCコネクタと同じ回路に繋がっていて、7〜12V の電源を供給する。
ここの電圧が 6.6V 以上だと USB の + と +5V の間にある FET がオフになって USB からの電源供給が止まる。

恥ずかしながら VIN なのでここに 5V 入れてやれば動くと思っていたのですが、うまく行きませんでした^^;

3. +5V

USB端子からの電源または VIN の電圧を降圧して 5V にしたものが繋がっている端子。

実は私はこの端子は出力専用だと思っていたのですが、ここに 5V を接続してやって電源を供給することができます。

公式ではおすすめしないとのことになっているようですが、それはおそらく「電圧が違っていると壊すからやめといたほうがいいよ」ということらしいです。

参考ページ



2017年7月7日金曜日

Ubuntu で Digispark Kickstarter

OS を Windows 10 から Ubuntu 17.04 に変えまして、Arduino IDE を使い始めたのですが Digispark Kickstarter に書き込みをしようとしたところエラーが発生しました。このあたりについてに日本語の情報が少ないようなのでメモ書き程度ですが記事にします。

■ スケッチ書き込み時に libusb-0.1-4 が見つからないと言われる

マイコンボードに書き込む」ボタンを押し「> Please plug in the device ... 」と表示されたところでUSBを差すと「error while loading shared libraries: libusb-0.1.so.4: cannot open shared object file: No such file or directory」とエラーが発生します。

最大6012バイトのフラッシュメモリのうち、スケッチが812バイト(13%)を使っています。
グローバル変数は13バイトのRAMを使用しています。
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
/home/kiya/.arduino15/packages/digistump/tools/micronucleus/2.0a4/micronucleus: error while loading shared libraries: libusb-0.1.so.4: cannot open shared object file: No such file or directory
どうやらライブラリーが足りないようです。

解決策は下記のページに書かれていました。
https://askubuntu.com/questions/311401/libusb-0-1-so-4-shared-lib-error-in-ubuntu-64-bit-system

[kiya@kiya ~]$ sudo apt-get install libusb-0.1-4

■ スケッチ書き込み時に micronucleus で例外が発生したと言われる

これでうまくゆくかと思ったら今度は「micronucleus: library/micronucleus_lib.c:66: micronucleus_connect: Assertion `res >= 4' failed.」というエラーが発生します…

最大6012バイトのフラッシュメモリのうち、スケッチが812バイト(13%)を使っています。
グローバル変数は13バイトのRAMを使用しています。
Running Digispark Uploader...
Plug in device now... (will timeout in 60 seconds)
> Please plug in the device ...
micronucleus: library/micronucleus_lib.c:66: micronucleus_connect: Assertion `res >= 4' failed.
> Press CTRL+C to terminate the program.
Aborted (core dumped)
え〜、ツールの中で例外が発生したの?そんなこと言われたってどうしたいいのかわからないです…

対策は下記のページに書かれていました。どうやらデバイスへのアクセス権が不足しているらしいです。
https://digistump.com/wiki/digispark/tutorials/linuxtroubleshooting

1. 下記の内容の「/etc/udev/rules.d/49-micronucleus.rules」というファイルを作ります。

[kiya@kiya ~]$ sudo vi /etc/udev/rules.d/49-micronucleus.rules
# UDEV Rules for Micronucleus boards including the Digispark.
# This file must be placed at:
#
# /etc/udev/rules.d/49-micronucleus.rules    (preferred location)
#   or
# /lib/udev/rules.d/49-micronucleus.rules    (req'd on some broken systems)
#
# After this file is copied, physically unplug and reconnect the board.
#
SUBSYSTEMS=="usb", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666"
KERNEL=="ttyACM*", ATTRS{idVendor}=="16d0", ATTRS{idProduct}=="0753", MODE:="0666", ENV{ID_MM_DEVICE_IGNORE}="1"
#
# If you share your linux system with other users, or just don't like the
# idea of write permission for everybody, you can replace MODE:="0666" with
# OWNER:="yourusername" to create the device owned by you, or with
# GROUP:="somegroupname" and mange access using standard unix groups.
2. ルールをリロードします。
[kiya@kiya ~]$ sudo udevadm control --reload-rules

以上でスケッチを書き込めるようになりました。


2017年6月14日水曜日

Pro Micro (クローン) 不明なUSBデバイス

Sparkfun Pro Micro、コピー品だと Amazo で 500円、AliExpress なら 340円ほどで手に入ります。
Leonardo 互換でこのサイズなのでなにかと使いやすいのですが、ちょっとだけ癖がありますので備忘録として残します。

Arduino IDE で書き込む際に、「ボード」にて「Sparkfun  Pro Micro」を選択するのですが、その際現れる「プロセッサ」にはデフォルトで「ATmega32U4(3.3V,8MHz)」が選択されています。

5V,16MHz版にこの状態で書き込んでしまうとブートローダーが破壊され「不明なUSBデバイス(デバイス記述子要求の失敗)」と表示されてシリアル接続ができなくなり、以後書き込むことができなくなってしまうのです。

こうなってしまった場合は単独では復旧させることは難しいと思います。

私の場合は、AdruinoISP スケッチを書き込んだ Arduino UNO に Pro Micro を接続して、「書込装置」に「Arduino as ISP」を選択して「ブートローダーを書き込む」にて復旧させることができました。

Arduino UNO Pro Micro 信号
D13 15 SCK
D12 14 MISO
D11 16 MOSI
D10 RST RESET
5V VCC
GND GND