esp-wroom-02(esp8266)のSPIFFS機能でフラッシュメモリにHTMLファイルを追加する

・目的

esp8266のファイルシステムにHTMLファイルを

追加しwebサーバーを立ち上げる

HTMLファイルをスケッチ内に書かなくて

いいのでかなり楽にコードが書ける。

 

・方法

(1)SPIFFSの導入

esp8266のファイルシステムを使うための準備をする

まず以下のサイトからツールをダウンロード

https://github.com/esp8266/arduino-esp8266fs-plugin

f:id:shangtian:20180217111208p:plain

f:id:shangtian:20180217111216p:plain

 

ダウンロードし終わったら解凍して

Arduinoファルダーにtoolsフォルダを

作成してtools以下に先ほど解凍した

フォルダをコピーする

/Arduino/tools/

f:id:shangtian:20180217111639p:plain

この作業が終わるとESP8266 Skech Data Upload

が追加される。

f:id:shangtian:20180217111749p:plain

 

ファイルをesp8266にアップロードするには

スケッチフォルダを表示をクリックして

f:id:shangtian:20180217112053p:plain

 

dataフォルダーを作成

f:id:shangtian:20180217112127p:plain

Flash Size をno SPIFFS以外の物を選択する

今回は512k(64K SPIFFS)にした

1M SPIFFSとかにするとアプロード時間が

凄く長くなるので必要最小限の容量を選択した方がいい。

 

dataフォルダーにアップロードしたいファイル

を入れたらesp8266を書き込みモードに変更して

ESP8266 Skech Data Uploadをクリック

f:id:shangtian:20180217112425p:plain

 

(2)スケッチ

SPIFFS機能を使うにはFS.hをインクルード

 

 

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <FS.h>
const char *ssid = "*****"; const char *pass = "******"; ESP8266WebServer server(80); void setup() { SPIFFS.begin(); //SPIFFSを開始 Serial.begin(9600); WiFi.begin( ssid, pass); while( WiFi.status() != WL_CONNECTED) { delay(500); Serial.println("..."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP() ); if( MDNS.begin("esp8266")) { Serial.println("MDNS responder started"); } server.begin(); server.on("/",[]() { String tmp;
//index.htmlファイルの読み込み File index = SPIFFS.open("/index.html", "r"); if(!index) Serial.println("file open failed"); else{ tmp = index.readString();//index.htmlをstringで読み込み index.close();//ファイルを閉じる } server.send(200, "text/html", tmp); } ); } void loop() { server.handleClient(); }

以下が今回使ったhtmlファイル

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ESP Web Server</title>
</head>
<body>
<p>WWWWWWWWWWWWW</p>

</body>
</html>


・結果
実行すると以下の写真のようになる
ブラウザに192.168.2.112を
/>入力するとhtmlファイルのwwwwww
がブラウザに表示できた。

f:id:shangtian:20180217103052p:plain

esp-wroom-02(esp8266)でmicroSDカードを使ってみた

 

・目的

esp8266でmicroSDを使ってみる。microSDは動作電圧が3.3V

なのでロジックレベル変換をしなくていいんで楽。

 

・使用したもの

esp-wroom-02(esp8266)

microSDdip化キット

       http://akizukidenshi.com/catalog/g/gK-05488/

抵抗10kΩ4個

3端子レギュレータ3.3V500mA (NJU722333)

単三4本

ジャンパワイヤ

 

・方法

(1)回路組み立て

SPI通信でesp8266とmicroSDを接続する。

esp8266がマスターでmicroSDがスレーブだ。

 

microSD側のピン配置は以下の図。

microSD側で使用するピンはCD/DAT3,CMD,VDD,CLK,

VSS,DAT0。

VDDは3.3V電源にVSSはGNDに接続。

カード検出スイッチは今回使わない。

f:id:shangtian:20180213163518p:plain

出典:http://akizukidenshi.com/download/ds/akizuki/K-5488_AE-MICRO-SD-DIP.pdf

 

esp8266のピンアウトを示した。

SPI通信でmicroSDとやりとりするので

紫色のピンを使う。

f:id:shangtian:20180214172036p:plain

出典:http://eleclog.quitsq.com/2015/08/esp-wroom-02.html

 

esp8266とmicroSDの接続するピンを以下の表に示した。

esp8266 microSD
CLK(IO14) CLK
MISO(IO12) DATA0
MOSI(IO13) CMD
CS(IO15) CD/DAT3

 

3端子レギュレータNJU72233で3.3Vを供給する。

またIO15,IO2,IO0への配線はesp8266のFlash boot moode

で起動するため。

f:id:shangtian:20180213155121p:plain

f:id:shangtian:20180213154825j:plain

 

(2)スケッチ

 

SPI通信を使うのでSD.hだけでなく

SPI.hもインクルードする。

CS(チップセレクト)ピンを15ピンに

設定したが、他のピンであっても大丈夫だ。

 

CS(Chip Select)ピンはSS(Slave select)ピンと表記される

こともある。このピンはマスタ側(esp8266)が通信相手(microSD)

を選択するときに使う。マスタ側は通信する相手のCSピンのみを

Lowにして通信を開始する。つまり通信中だけCSがLowでそれ以外は

Highになるように設定する。setup()関数の最初でcsピンをOUTPUT

でHIGHに設定しておく。

 

#include <SD.h>
#include <SPI.h>

File myFile;
const int cs = 15;

void setup() {
  pinMode(cs,OUTPUT);
  digitalWrite(cs,HIGH);
  Serial.begin(9600);
  while(!Serial) {
    ;
  }
  Serial.println("Initializing SD card...");
  
  if(!SD.begin(cs)) {
    Serial.println("initialization failed");
    return;
  }
  Serial.println("initialaization done.");

  if(SD.exists("example.txt")) 
    Serial.println("example.txt exists.");
  else
    Serial.println("example.txt dosen't exist.");

  Serial.println("Creating example.txt");
  myFile = SD.open("example.txt", FILE_WRITE);


  if(myFile){
     Serial.println("writing ....");
     myFile.println("12345abcd");
     myFile.close();
  }else 
     Serial.println("error opening examole.txt");
  myFile = SD.open("example.txt");
  if(myFile){
    Serial.println("example.txt :");  

    while(myFile.available()) 
       Serial.write(myFile.read());
    myFile.close();
  }else
     Serial.println("error opening example.txt");
}

void loop() {
  
}

 

・実行結果

以下の写真が実行結果

ちゃんと動いてますな 

f:id:shangtian:20180214181726p:plain

 

 

参考文献

「SPI」の解説 - しなぷすのハード製作記

SPI通信で、PICと加速度センサを「お話」させてみた | 技ラボ

SDカードコネクタのピン配列: マイコンな日曜

卓上はんだ吸煙機をつくってみた



・目的

卓上はんだ吸煙機をつくる

 

・使用したもの

アクリル板

 

 

アイネックス ケース用ファン80mm 標準タイプ CFY-80F

アイネックス ケース用ファン80mm 標準タイプ CFY-80F

 

オウルテック 金属製ファンガード 8cm シルバー FANGuard-M8/II

ATtiny13a-pu 
TA7291P (モータードライバ)
NJM7805FA(5V 1A  3端子レギュレータ)

トルグスイッチ

DCコネクタ

ユニバーサル基板

オスピン

 

・方法

 (1)回路を組み立てる

 回路図を図1に示した。

単純にモータードライバはon/off

 のみにしか使っていない。

TA7291Pの4ピン(verf)は12Vに

7,8ピンも12Vにつないである。

 

適当なトランジスタがあれば

トランジスタを使った方がいいかも

しれない。

 

今回使ったらファンは3端子で

赤黒白のコードでつながれていた

使った端子は赤と黒のコード

f:id:shangtian:20180102232923p:plain

 

 (2)プログラム

スケッチを図2に示した。

0ピンにトルグスイッチを接続

しており、digitalRead()で値を受けとる。

const int IN1 = 1;
const int IN2 = 2;
const int SWI = 0;
void setup() {
  pinMode(IN1,OUTPUT);
  pinMode(IN2,OUTPUT);
  pinMode(SWI,INPUT);
  //Serial.begin(9600);
  }

void loop() {
  int val = digitalRead(SWI);
  //Serial.println(val);
  if(val == 0) off();
  else rot();

  delay(1000);
}

void rot() {
  digitalWrite(IN1,HIGH);
  digitalWrite(IN2,LOW);
  
}

void off() {
  digitalWrite(IN1,LOW);
  digitalWrite(IN2,LOW);
}

図2:スケッチ

 

(3)組み立て

 アクリル板を適当な大きさに切って

ファンをグルーガンで接着。

 

基板もファンの側面に接着。
f:id:shangtian:20180109125215j:image

 

 

一応完成
f:id:shangtian:20180109125149j:image

 

・結果

線香を燃やして試してみたら

ちゃんと煙を吸引していた

ので一応成功

 

ただスイッチでon/offのコントロール

しかしてないんでマイコンを使う

意味が無かった気がする

 

nanopi neo のセットアップ

 

この記事は MCC Advent Calendar 2017 - Adventar の20日目の記事です。

前回はgurapomuさんによる

人間性とか社会性とかの話 - ヒューマンコンテンツにっき

でした。

 

目次 

 

・nanopi neoとは 

 

nanopi neoはFriendlyARM社が

発売しているpiボード。

このボードはUbuntu core 16.04

をサポートしており、他にも

使えるosがある模様。

 

nanopi neoにはmicroSDカード

スロット、USBポート、LANポート

電源供給用microUSBポートをそれぞれ

1個ずつそなえている。またAudio I/O

5pin、 GPIO 36pinを装備しており

UART SPI I2Cもサポートしている。

 

但しWiFiBluetoothは内蔵していない。

これは値段相応ってところですねぇ

Wifiがついてないのは結構痛い

ただusb無線lanアダプタでwifi接続も

可能なんだけど自分はうまくいかなかったです

 

 

秋月電子では1680円で販売されている。

Raspberry piが4000~5000円するのと

比べるとかなり安価。

 

 ・OS イメージの書きこみ

microSDカードにOSイメージを

書き込む。

 https://m.mediafire.com/folder/n5o8ihvqhnf6s/Nanopi-NEO

に飛んでofficia-lROMsファイルの中の

nanopi-neo_FriendlyCore-Xenial_4.11.2_20171122.img

をダウンロード

 

SDカードをマウントしてイメージを書き込む

$diskutil list
$diskutil unmountDisk /dev/disk2
$ cd Downloads
$sudo dd if=nanopi-neo_FriendlyCore-Xenial_4.11.2_20171122 of=/dev/rdisk2 bs=1m

時間が数分かかるので待つ

 

・シリアル通信で端末を開く

SDカードにイメージを書き込み終わったら

nanopiにSDカードを入れる。

電源を入れる前にシリアル変換機を

UARU0に接続する。

 

以下の表のように接続すること。

 

シリアル変換 nanopi neo
RX TX
TX RX
5V ---/td>
GND GND

f:id:shangtian:20171220081836j:plain

出典:File:NEO pinout-02.jpg - FriendlyARM WiKi

 

f:id:shangtian:20171217181811j:plain

 

接続し終わったらターミナルで

$ls -l /dev/tty.*

でシリアル変換機のデバイス名を調べると

/dev/tty.usbserial-A1032F1Q

であったので

$screan /dev/tty.usbserial-A1032F1Q 115200

を実行してシリアル接続をする

$screen 接続先デバイス ボーレート

という感じで書く nanopi neoとは115200bps

で通信可能

 

nanopi neoを電源に接続すると

NanoPi-NEO login:
Password:

を要求される

デフォルトで

non-root user

ユーザー名 : pi
パス    : pi

 

root user

ユーザー名 : root 
パス: fa

 

ログインすると図のような画面が表れる。

f:id:shangtian:20171217175106p:plain

 

ユーザー名、パスワード、言語、タイムゾーンssh

などの変更は

$sudo npi-config

f:id:shangtian:20171217180611p:plain

・ピンの半田づけとヒートシンクの取り付け

まずはオスピンを半田づけしていく

f:id:shangtian:20171217181709j:plain

 

Nanopi neo

はかなり熱を発するとのことなんで

ヒートシンクを取りつける

f:id:shangtian:20171217181910j:plain

 

 白い正方形のやつがcpuグリス

f:id:shangtian:20171217182032j:plain

グリスを載せたらヒートシンク

ネジ止めする

f:id:shangtian:20171217182112j:plain

なんか間が結構空いてるなぁ

f:id:shangtian:20171217182135j:plain

 

明日はepcnt19さんによるNginxモジュールを書いてみるです。

<参考文献>

NanoPi NEO - FriendlyARM WiKi

screenを使ったserial接続と終了の方法メモ - Qiita

SDカードにイメージを書き込む方法 - Qiita

dd (UNIX) - Wikipedia

NanoPi NEO初期設定メモ · GitHub

 

esp-wroom-02(esp8266) boot mode(x,y)とは

esp-wroom-02がエラーコードをシリアル

モニタにはき出したものを見るとたとえば

rst case:2 boot mode:(1,6)

みたいなのが書いてある。

今回はそのboot modeについて

 

端的に言うとboot mode:(x,y)は

esp-wroom-02の状態を表している。

 

シリアルモニタの通信速度を74880bps

に設定するとboot modeを知ることが

出来る。

 

まずはboot modeのxについて

GPIO15,GPIO0,GPIO2のピンの状態を

2進数で表すと以下の表のようになる 

2進数 GPIO15 GPIO0 GPIO2
000 Low Low Low
001 Low Low High
010 Low High Low
011 Low High High
100 High Low Low
101 High Low High
110 High High Low
111 High High High

 

それぞれのピンの状態によって

ESP8266の動作が変わる

シリアルモニタで表示されるboot mode(x,y)

のxは以下の表の10進数部分と対応する

 

例えば

esp8266にプログラムを書き込むときは

x=1に設定する

またプログラムを実行するときは

x=3に設定する 

xの意味
code(2進数) code(10進数) 意味
000 0 Remapping
001 1 Boot from the UART0. Also includes flashing
the flash memory for subsequent normal start
010 2 Jump start
011 3 Boot from flash memory
100 4 SDIO low speed V2
101 5 SDIO high speed V1
110 6 SDIO low speed V1
111 7 SDIO high speed V2

 

 次はboot mode(x,y)のyの部分について

以下の表に示した

yの値はcodeの値と対応する

yの意味
code 意味
0 Remapping
1 UART Boot
2 Jump Boot
3 FLASH Boot
4 SDIO LowSpeed V2 IO Uart1 Booting
5 SDIO HighSpeed V1 IO Uart1 Booting
6 SDIO LowSpeed V1 IO Uart1 Booting
7 SDIO HighSpeed V2 IO Uart1 Booting

 

<参考文献>

Kolban’s book on the ESP8266 | Neil Kolban Tech

ディスプレイなしでRaspberry piを操作する方法

この記事はMCC Advent Calendar 2017 - Adventarの5日目の記事です

  

 

 

・はじめに

このまえRaspberry piをディスプレイなし

で使わないといけない時があって苦労したんで

まとめときます

 

・前提として

Raspberry piにはOSが

インストールされていること

OSはRaspbian            

ここではRaspberry pi 3 Model Bを使用した

またssh接続を有効に設定してあること

 

スマホssh接続

-用意するもの

Androidスマホ

 Termux 

Termux - Google Play の Android アプリ

ConectBot

ConnectBot - Google Play の Android アプリ

 の2つのアプリをインストール

 

まずはRaspberry piスマホ

usb接続する

 

次にテザリングを有効化する


f:id:shangtian:20171204095952j:image

usbテザリングを有効化


f:id:shangtian:20171204100027j:image

 

Termuxを起動して


f:id:shangtian:20171204100112j:image

$arp -a

を実行してRaspberry pi

ipアドレスを確認

raspberrypi {192.168.42.205} 

とかいてある

 

ConectBotを起動して

右下のプラスマークをタップして
f:id:shangtian:20171204100506j:image

 

さっき確認したraspberry piipアドレス

以下のように記入して右上の➕をタップ
f:id:shangtian:20171204100639j:image

 


f:id:shangtian:20171204100701j:image

 

ここでパスワードを入力すれば終了

f:id:shangtian:20171204212534p:plain

 

これでssh接続完了

f:id:shangtian:20171204212537p:plain

 

sshじゃなくてGUI操作するぞ

sshじゃ困るという場合VNC viewerという

アプリを使ってリーモートディスクトップ

環境を作る

 

まずはスマホ

VNC Viewer - Remote Desktop - Google Play の Android アプリ

をインストール

 

先ほど使ったConnectBotでssh接続して

ラズパイ側のセットアップをしていく

 

Raspberry pi側にもインストールする

必要がある為(ラズパイがネットに繋がってないと

インストールできないため有線しとくといい)

$ sudo apt-get install x11vnc

インストールし終わったら

$z11vnc -forever

vncを起動する

f:id:shangtian:20171204212549p:plain

 

上手くラズパイ側でVNCを起動できると

以下の写真にたいになる

f:id:shangtian:20171204212601p:plain

 

以上でRaspberry pi側のセットアップは終わり

あとはスマホVNC viewerを起動して

Addressに最初に調べたipアドレスを記入する

Nameの方は任意で大丈夫だ

f:id:shangtian:20171204213756p:plain

 

OKをタップする

f:id:shangtian:20171204213800p:plain

f:id:shangtian:20171204213805p:plain

 以上で完了

 

 

・有線してssh

パソコンとRaspberry piを有線LAN接続して

sshを確立する

 

(1)macの場合

mac mini (Late 2014)

macOS Sierra 10.12.6

 

まずRaspberry pimac miniとを有線接続

f:id:shangtian:20171204220034j:plain

ターミナルを開いて

$ssh pi@raspberrypi.local

 

で接続できる

 

 (2)windowsの場合

Let's note CF-SZ5

Windows10

まずインストールしなければならないものが

いくつかある

まずは

Tera Termをインストール

「Tera Term」定番のターミナルエミュレーター - 窓の杜ライブラリ

 

次に

Bonjour Print Servicesをインストール

ダウンロード - Bonjour Print Services (Windows)

 もしiTuesがインストールされていれば

Bonjour Print Servicesをインストールする必要はない

 

インストールし終わったら

ラズパイとPCを有線して

Tera Termを起動する

 

f:id:shangtian:20171204230024j:plain

ホスト(T):raspberrypi.local

と記入してokをクリック

f:id:shangtian:20171204222630p:plain

 ユーザー名とパスワードを入力すると

f:id:shangtian:20171204222642p:plain

接続できる

f:id:shangtian:20171204222652p:plain

 

(3)ubuntuの場合

ubuntuでは特に何かインストールが

必要なわけではない

f:id:shangtian:20171204230113j:plain

端末を開いて

$ssh pi@raspberrypi.local

で完了

f:id:shangtian:20171204230133p:plain

 

<参考文献>

Raspberry Pi Zero に Android から USBテザリング で SSH接続 | Home Made Garbage

Raspberry PiとMac or Windows PCを有線で直接繋いでさくっとSSH接続する - Qiita

ATTiny13Aでシリアル通信を行う

・目的

ATTiny13Aのピン一つでシリアル通信を行う

 

・使用したもの

ATTiny13A

シリアル変換機

ダイオード

トランジスタ

10KΩ抵抗 1個

ブレッドボード

Arduino IDE

mac mini

 

・方法

 

(1)ライブラリのインポート

まずはシリアル通信を行うために

ライブラリを追加する

 

下のサイトにとんで

Nerd Ralph: AVR half-duplex software UART supporting single pin operation

 

赤で囲ってある部分をクリックすると

ライブラリをダウンロードできる

 

f:id:shangtian:20171116185859p:plain

 図1:ライブラリのダウンロード

出典:Nerd Ralph: AVR half-duplex software UART supporting single pin operation

 

ダウンロードし終わったら

zip形式のライブラリをインストールを

クリックしいて BasicSerial3を選択する

f:id:shangtian:20171116190247p:plain

 図2:ライブラリの追加

 

(2)回路を組み立てる

 

図3に回路図を示した

シリアル変換器につなげるときは

TX-RX RX-TX

とクロスして接続すること

f:id:shangtian:20171116185106p:plain

 図3:シリアル通信回路

 

(3)ライブラリの設定

 

使うピンの指定と通信速度はをスケッチ上では

指定できないのでライブラリを直接編集して

指定する。

 

まずは使用するピンの指定から

$vim Documents/Arduino/libraries/BasicSerial3
$vim BasicSerial3.S

 13,14行目にデフォルトで

#define UART_Tx 5
#define UART_Rx 5

とあるので5を2に変更

#define UART_Tx 2
#define UART_Rx 2

 

つぎに通信速度の指定

$vim BasicSerial3.h

7行目にある

#define BAUD_RATE 115200

がシリアル通信の速度を指定している

今回38400bpsに指定したいので

#define BAUD_RATE 38400

に変更して保存

 

以上でライブラリの設定は終わり

 

(4)スケッチの作成

スケッチを示した 

1を受け取ったら”CHIBA”を返し

それ以外は”jajaja”を返す 

#include <BasicSerial3.h> 

void setup() {

}

void serOut(const char* str) {
   while (*str) TxByte (*str++);
}

void loop(){
  byte c;
  c = RxByte();
  switch(c) {
    case '1': 
      for (uint8_t i=0;i<10;i++) serOut("CHIBA");
      serOut("\n\r");
      break;
    default:
      serOut("jajaja");
      break;
      
  }
}

図4:スケッチ

 

・結果

 

上手くいくとこんな感じ

f:id:shangtian:20171117212955p:plain

 図5:シリアルモニタ

 

追記

BasicSerial3.SのUART_Tx 、UART_Rx 

を違うピンを割り振れば

普通のシリアル通信が行える

回路図を図6に示した

$vim BasicSerial3.S

 13,14行目

#define UART_Tx 1
#define UART_Rx 0

f:id:shangtian:20171117220041p:plain

図6:回路図

 

<参考文献>

Nerd Ralph: AVR half-duplex software UART supporting single pin operation

ATtiny13Aでシリアル通信(UART)を行う: 猫にコ・ン・バ・ン・ワ