メインコンテンツまでスキップ

「ESP32」タグの記事が4件件あります

全てのタグを見る

· 約1分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

ESP32をAWS IoTにつなぐ方法です。 自分用のメモです。

Arduino+外部ライブラリー(MQTT+ArduinoJson)

簡単度:★★★★★

一般的なArduinoのライブラリー(MQTTとArduinoJson)を使って実現します。

参考 https://github.com/aws-samples/aws-iot-esp32-arduino-examples https://aws.amazon.com/jp/blogs/compute/building-an-aws-iot-core-device-using-aws-serverless-and-an-esp32/

Arduino+AWS製ライブラリー

期待度:★★★★★

aws-samplesのリポジトリ内で開発されています。Amazon iot C-SDKに存在しないGreengrass部分を開発しているようです。 名前がGreengrassとなっていますが、AWS IoTと直接やり取りすることもできます。

参考 https://github.com/aws-samples/arduino-aws-greengrass-iot

FreeRTOS

本気度:★★★★★

お手軽ではありませんが、AWS謹製でございます。おそらく新機能も一番早いでしょう

https://aws.amazon.com/jp/freertos/

· 約2分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

最近のiPhoneって、ホームボタンないんですってね。 ホームボタンあったら、嬉しいですよね? Android使いなのでよくしらないですが。

ESP32を使って物理ボタンを追加しましょう。

仕組み

ArduionoのライブラリーでBluetoothキーボードにできるものがあったので、これを使います。

ESP32-BLE-Keyboard https://github.com/T-vK/ESP32-BLE-Keyboard

準備するもの

ESP32-DevKitC V4 ブレッドボード タクトスイッチ

こんな感じです。

IMG_20200430_161245.jpg

ソース

タクトスイッチが押されたらcommand + Hを送ります。それだけです。

#include <Arduino.h>
#include <BleKeyboard.h>

BleKeyboard bleKeyboard;

const int switchPin = 32;

int currentState = 0;
int beforeState = 0;

void setup()
{
Serial.begin(9600);
pinMode(switchPin, INPUT);

bleKeyboard.begin();
}

boolean isChange(int current, int before)
{
return (current != before) && (current == 1);
}

void loop()
{
currentState = digitalRead(switchPin);

if (isChange(currentState, beforeState))
{
Serial.println("Change!!!");

if(bleKeyboard.isConnected()) {
bleKeyboard.press(KEY_LEFT_GUI); // Windows key
bleKeyboard.press(0x68); // H key
delay(100);
bleKeyboard.releaseAll();
}
}

beforeState = currentState;

delay(100);
}

使ってみた

手元にあるiPadで試してみました。 Bluetoothの設定にてESP32 BLE Keyboardとペアリングをすれば準備完了。

タクトスイッを押せばホーム画面に戻ります!期待通り!

ただし!物理キーボードが接続されていると判定されるので、テキスト入力が必要なところでソフトウェアキーボードが出ません!!!

どうしても使いたい場合は、下向き三角(下図)を長押しするとソフトウェアキーボードが出てくれます。一度ソフトウェアキーボードが出る状態になると、次からもソフトウェアキーボードが出ます!

コメント 2020-04-30 160915.png

やった! これで、物理ホームボタンの完成です!

· 約5分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

とうとうAmazon FreeRTOSにも手を出しました。

環境

デバイス

  • ESP32-DevKitC

開発環境

  • Ubuntu 18.04 (on VirtualBox)

チュートリアルやってみました

基本的にはドキュメントのとおりです。

Getting Started with the Espressif ESP32-DevKitC and the ESP-WROVER-KIT https://docs.aws.amazon.com/freertos/latest/userguide/getting_started_espressif.html

IAMユーザーの準備

手順の途中でIoTのThingを作ったり証明書を作ったりする手順があります。これらの手順は便利ツールが用意されているのでかんたんにできますが、便利ツールの実行に内部ではAWS CLIが使われているため、IAMユーザー(アクセスキー、シークレットアクセスキー)が必要です。必要な権限は

  • AmazonFreeRTOSFullAccess
  • AWSIoTFullAccess

開発環境の準備

ツールチェインの導入

Linuxの場合はこちらの手順です。

https://docs.espressif.com/projects/esp-idf/en/v3.3/get-started-cmake/linux-setup.html

sudo apt-get install git wget libncurses-dev flex bison gperf python python-pip python-setuptools python-serial python-cryptography python-future python-pyparsing cmake ninja-build ccache
mkdir -p ~/esp
cd ~/esp
tar -xzf ~/Downloads/xtensa-esp32-elf-linux64-1.22.0-80-g6c4433a-5.2.0.tar.gz

パスの設定をする。~/.profileに以下を追記

export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"
alias get_esp32='export PATH="$HOME/esp/xtensa-esp32-elf/bin:$PATH"'

sudoなしで/dev/ttyUSB0にアクセスする権限を追加

sudo usermod -a -G dialout $USER

CMakeの導入

https://cmake.org/download/ からcmake-3.16.2-Linux-x86_64.shをダウンロードします。 その後インストール。インストール先は~/cmake-3.16.2-Linux-x86_64にしました。

chmod +x cmake-3.16.2-Linux-x86_64.sh
./cmake-3.16.2-Linux-x86_64.sh

パスの設定をする。~/.profileに以下を追記

export PATH="$HOME/cmake-3.16.2-Linux-x86_64/bin/:$PATH"

Amazon FreeRTOSのダウンロード

releaseブランチをclone

git clone https://github.com/aws/amazon-freertos.git --recurse-submodules -b release

AWS CLIのインストール

pipでインストールできるのは知ってましたが、他のインストール方法もドキュメント上あったのご参考までに。

https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html

curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
unzip awscli-bundle.zip
sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

aws configureして、アクセスキー、シークレットアクセスキー、リージョンを設定する。

pythonの必要ライブラリーをインストール

pip install tornado nose --user
pip install boto3 --user

<amazon-freertos>/tools/aws_config_quick_start/configure.jsonに設定を書き込む。 afr_source_dirにはデフォルト値が入ってるのでそのまま(相対パス指定)で問題ありませんでした。 その後、以下のコマンド

cd <amazon-freertos>/tools/aws_config_quick_start
python SetupAWS.py setup

ビルドしてフラッシュ

さていよいよビルドしてフラッシュです。

ビルド

cd <amazon-freertos>
cmake -DVENDOR=espressif -DBOARD=esp32_wrover_kit -DCOMPILER=xtensa-esp32 -S . -B build

ドキュメント上、your-build-directoryとありますが、後続のコメントはこれがbuildである前提で書かれてますのでご注意ください。

cd build
make all -j4

消して、書いて、モニターする。

cd <amazon-freertos>
./vendors/espressif/esp-idf/tools/idf.py erase_flash flash monitor -B build

ドキュメント中は-p /dev/ttyUSB1とあって、私の環境では、/dev/ttyUSB0でした。更にこの-pオプションがなかっても検出してくれるようなので、指定なしでも動きました。

めでたしめでたし。

デモをGreengrass接続のものに変更

ここに書いてある方法でできます。 https://docs.aws.amazon.com/freertos/latest/userguide/gg-demo.html

  • AWS IoTのマネジメントコンソール画面で、モノの中にあるFreeRTOSデバイスにアタッチした証明書にアタッチしているポリシーポリシードキュメントに、greengrassへのアクセス許可を追加
  • GreengrassグループのロールにAmazonS3FullAccess AWSIoTFullAccessを追加。
  • FreeRTOSのモノを、Greengrassグループのデバイスに追加。
  • GreengrassグループのサブスクリプションでソースをFreeRTOS、ターゲットをIoT Cloudにする
  • ソースコードの修正
<amazon-freertos>/vendors/espressif/boards/esp32/aws_demos/config_files/aws_demo_config.h
#define CONFIG_MQTT_DEMO_ENABLED
define CONFIG_GREENGRASS_DISCOVERY_DEMO_ENABLED

Greengrass接続のデモを、センサー値収集に変更

鋭意作成中 動作未確認

demos/greengrass_connectivity/aws_greengrass_discovery_demo.c
+ include "esp_adc_cal.h"

-#define ggdDEMO_MQTT_MSG_DISCOVERY "{\"message\":\"Hello #%lu from Amazon FreeRTOS to Greengrass Core.\"}"
+#define ggdDEMO_MQTT_MSG_DISCOVERY "{\"value\":\"%lu\"}"

+ esp_adc_cal_characteristics_t *adc_chars = calloc(1, sizeof(esp_adc_cal_characteristics_t));
+ esp_adc_cal_characterize(ADC_UNIT_1, ADC_ATTEN_DB_11, ADC_WIDTH_BIT_12, ESP_ADC_CAL_VAL_DEFAULT_VREF, adc_chars);
+
+ uint32_t voltage;
+ IotLogInfo( "%lu", ( long unsigned int )voltage);
+ esp_adc_cal_get_voltage(ADC1_CHANNEL_6, adc_chars, &voltage);


- xPublishInfo.payloadLength = ( uint32_t ) sprintf( cBuffer, ggdDEMO_MQTT_MSG_DISCOVERY, ( long unsigned int ) ulMessageCounter ); /*lint !e586 sprintf can be used for specific demo. */
+ xPublishInfo.payloadLength = ( uint32_t ) sprintf( cBuffer, ggdDEMO_MQTT_MSG_DISCOVERY, ( long unsigned int ) voltage );

· 約3分
moritalous
お知らせ

過去にQiitaに投稿した内容のアーカイブです。

ESP32-DevKitCでAmazon Dashボタンもどきを作ります。 C言語はわからないのでMicroPythonです。 簡単です。

準備

ESP32-DevKitC IFTTTアカウントとWebhookをトリガーとしたアプレット

開発環境

Windows 10 Visual Studio Code Putty Python 3.7(ストア版)

開発環境構築

Pythonの仮想環境作成

python -m venv .venv
.venv\Scripts\activate

ライブラリー導入

pip install esptool adafruit-ampy

ESP32にMicroPythonファームの導入

http://micropython.org/download#esp32 からファームウェアをダンロードします。 (2019/12/29の最新版はesp32-idf3-20191220-v1.12.bin)

esptool --port COM4 erase_flash
esptool --chip esp32 --port COM4 write_flash -z 0x1000 esp32-idf3-20191220-v1.12.bin

COM4は環境に合わせて修正します。

これでMicroPythonのファームウェアが導入でき、シリアル接続をすると対話インタプリタモード(REPL)でMicroPythonがESP32上で実行できます。

Puttyで接続する場合はCOM4ポートにSpeed115200を指定し、シリアル接続します。

コメント 2019-12-29 143339.png

Dashボタンプログラムの導入

MicroPythonはREPLで実行もできますが、ソースコードをESP32側に導入することでも実行できます。boot.pymain.pyというファイルが標準で用意されていて、boot.pyのあとでmain.pyが呼ばれる仕組みのようです。 main.pyを書き換えます。

main.py
wifi_ssid = '[Wi-Fi SSID]'
wifi_password = '[Wi-Fi パスワード]'
get_url = '[IFTTTのWebhook URL]'

def do_connect():
import network
sta_if = network.WLAN(network.STA_IF)
if not sta_if.isconnected():
print('connecting to network...')
sta_if.active(True)
sta_if.connect(wifi_ssid, wifi_password)
while not sta_if.isconnected():
pass
print('network config:', sta_if.ifconfig())

try:
do_connect()

import urequests
r = urequests.get(get_url)
finally:
pass

import machine
print('deepsleeping..')
machine.deepsleep()

IFTTTのWebhookは予め準備しておいてください。 処理の流れとしては

  1. 電源が入る
  2. Wi-Fi接続
  3. IFTTTにリクエスト送信
  4. ディープスリープに入る

となってます。

肝心のDASHボタンのボタンは、基板上に用意されているENボタンを使います。 ボタンが押されたらリセットし、頭から処理をするだけです。処理が終わったらディープスリープに入って省電力モードに入るとうわけです。

簡単!

電池の持ちは実験してみようと思います。