macsbug

Just another WordPress.com site

Archive for 7月 2016

ESP8266 of sensors to display to the iPad

leave a comment »

ESP8266 に接続したセンサーの値を iPad に表示しました。       2016.07.29
開発は iOSデバイス上で動作する統合開発環境 Pythonista 3 を使用します。


機能と動作:
ESP8266に接続したBME280センサーの 温度,湿度,気圧 を数値で表示します。
下のスイッチは ESP8266 からデーターを送る時間間隔を設定します。


準備:

1. iPad:Pythonista 3 (1200円) がインストール済みである事。
_  パネルデザイン:UI 編集機能を使用し パネルのデザインを行います。
_  下記の Pythonista のリストをインストール。
2. ESP8266:BME280(紫色のボード) を I2C 接続。
_  下記の ESP8266 のリストをインストール。
3. WiFi 環境


参照:macsbug:Control the ESP8266 in iPad:前回記事。


 

UDP通信:Pythonista (Python)と ESP8266 の基礎。
_    注:勉強不足により記述が不十分かも知れません。





iPad pythonista 3 リスト 2016.07.29 : macsbug


import socket
import ui
import time

def sw1(s):tx.sendto(bytes('1', 'utf-8'), (HOST, PORT))
 
def sw2(s):tx.sendto(bytes('2', 'utf-8'), (HOST, PORT))
 
def sw3(s):tx.sendto(bytes('3', 'utf-8'), (HOST, PORT))
 
def sw4(s):tx.sendto(bytes('4', 'utf-8'), (HOST, PORT))

def sw5(s):tx.sendto(bytes('5', 'utf-8'), (HOST, PORT))

def all(s):
 v['button1'].background_color = on
 v['button2'].background_color = of
 v['button3'].background_color = of
 v['button4'].background_color = of
 v['button5'].background_color = of
 
v = ui.load_view('panel_thp')
v.background_color = '#d3dad7'
v.present('sheet')
HOST, PORT = '192.168.100.47', 7000
rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
time.sleep(1)
rx.bind(('', 9000))
tx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
on = '#d7ffb9'
of = '#bdbdbd'
all('')

while True: 
 d1 = str(rx.recv(32)) # d1 = b'4233/33.85/36.39/1009.90'
 t1 = d1.find('/')
 a1 = d1.find('/', t1+1, len(d1))
 a2 = d1.find('/', a1+1, len(d1))
 mode = d1[2:t1]
 t = mode + d1[t1+1:t1+2]
 if mode == 'd':                           # sensor data
 v['textfield1'].text = d1[t1+1:a1-1]      # temp
 v['textfield2'].text = d1[a1+1:a2-1]      # humi
 v['textfield3'].text = d1[a2+1:len(d1)-2] # pres
 
 if mode == 't':                           # time data
 all('')
 v['button1'].background_color = of
 
 if t.find('t1') > -1:v['button1'].background_color = on
 
 if t.find('t2') > -1:v['button2'].background_color = on
 
 if t.find('t3') > -1:v['button3'].background_color = on
 
 if t.find('t4') > -1:v['button4'].background_color = on
 
 if t.find('t5') > -1:v['button5'].background_color = on

 

ESP8266 スケッチ

// BME280 Temo,Humi,Pres Sensor: ESP8266 & iPad : 2016.07.20 macsbug
// UDP communication
// ESP8266(ip:192.168.100.47,port:9000) transmit ---|
// ipad   (ip:192.168.100.22,port:9000) receive  <--
// ipad   (ip:192.168.100.22,port:7000) transmit ---
// ESP8266(ip:192.168.100.47,port:7000) receive  <--|

#include <ESP8266WiFi.h>                         //
#include <WiFiUDP.h>                             //
#include <Wire.h>                                //
#include <BME280_MOD_1022.h>                     //
#include <Ticker.h>                              //
extern "C" {                                     //
  #include "user_interface.h"                    //
}                                                //
static WiFiUDP UDP;                              //
const char ssid[]="xxxx";                        // wifi ssid
const char pass[]="xxxx";                        // wifi password
const char iPhoneIP[]   = "192.168.100.22";      // iPhone iP
const int  iPhoneTxPort = 7000;                  // UDP Tx port
const int  iPhoneRxPort = 9000;                  // UDP Rx port
char buff[32];                                   // rxceive buffer
Ticker ticker1;                                  // timer
long ta =  -5.3;                                 // temperatue adjust
long ha = +16.7;                                 // humidity   adjust
long pa =  +3.5;                                 // press      adjust

void setup(){                                    //
  Serial.begin(115200);                          //
  //---------------------------------------------// BME280 setup
  Wire.begin(D6, D7); delay(10);                 // SDA, SCL 12,13
  BME280.readCompensationParams();               // read the NVM comp parameters
  BME280.writeOversamplingTemperature(os1x);     // 1x over sampling
  BME280.writeOversamplingHumidity(os1x);        // 1x over sampling
  BME280.writeOversamplingPressure(os1x);        // 1x over sampling
  //---------------------------------------------// WiFi setup
  WiFi.begin(ssid,pass);                         //
  while( WiFi.status() != WL_CONNECTED) {        //
    delay(500);  Serial.print(".");              //
  }                                              //
  Serial.println("WiFi Connect");                //
  UDP.begin(iPhoneTxPort);                       //
  ticker1.attach_ms(3000, report);               //
}                                                //

void loop(){                                     //         
  ESP.wdtDisable();                              //
  int rx = UDP.parsePacket();                    // packet size
  if (rx){                                       // recive
    int len = UDP.read(buff, rx);                // rx lengs
    if (len > 0){                                // rx action
      ticker1.detach();                          // timer off
      buff[len] = '\0';                          // Termination char
      int c = buff[0];                           // header
      String r = "0";                            // No
      long t;                                    // time
      if ( c == '1' ){ r = "1"; t = 3*1000;}     // 1,  3 sec
      if ( c == '2' ){ r = "2"; t = 5*60*1000;}  // 2,  5 min
      if ( c == '3' ){ r = "3"; t = 15*60*1000;} // 3, 15 min
      if ( c == '4' ){ r = "4"; t = 30*60*1000;} // 4, 30 min
      if ( c == '5' ){ r = "5"; t = 60*60*1000;} // 5, 60 min
      //-----------------------------------------// UDP Transmitt
      String data = "t/" + r + "/ / ";           //
      UDP.beginPacket(iPhoneIP, iPhoneRxPort);   // UDP port
      UDP.print(data);                           // Tx  data
      UDP.endPacket();                           // end packet
      //-----------------------------------------// UDP Transmitt
      ticker1.attach_ms(t, report);              // t timer set & measure   
      c = '9';                                   //
    }                                            //
  }                                              // 
}                                                // 

void report(){                                   //
  ESP.wdtDisable();                              //
  //---------------------------------------------// BME280 sensor
  BME280.writeMode(smForced);  delay(50);        // chip goes back to sleep
  while (BME280.isMeasuring()){delay(50);}       // BME280 check
  BME280.readMeasurements();                     // read out the data
  String t = String(BME280.getTemperature()+ta); // Temperature
  String h = String(BME280.getHumidity()   +ha); // Humidity
  String p = String(BME280.getPressure()   +pa); // Pressure 
  String c = String(int(millis()/1000));         // count
  String data = "d/" + t + "/" + h + "/" + p;    // id+temp+html+pres
  //---------------------------------------------// UDP Transmitt
  UDP.beginPacket(iPhoneIP, iPhoneRxPort);       // UDP port
  UDP.print(data);                               // Tx  data
  UDP.endPacket();                               // end packet
  //---------------------------------------------// UDP Transmitt
}                                                //


 

感想:
🍎 製作時間:前回(Control the ESP8266 in iPad)を基に短時間にできました。
🍎 パネルのデザイン:奇麗に作る事が出来 楽しくなります。
🍎 送信の間隔:ESP8266からのデーター送信の時間間隔は iPad から送り
_    ESP8266 の Ticker の Timer 値を設定します。 その設定状態は
_    iPad へ返信し スイッチに色で表示します。
🍎 表示方法:今回 表示は数値のみにしました。
🍎 費用対効果:iPad,iPhone をすでにお持ちでしたら有効に使用できます。
_   Pythonista 3 は有料で1200円ですが アイデア次第で多くの事が出来る
_   可能性があります。この点を考慮すると安いと思われます。
_   ESP8266 でコントローラーや表示装置を作るとこれ以上に費用と手間
_   が必要です。又 ブラウザーに表示する方法は HTML記述の複雑化や行
_   数が大きくなり負担になる事や表現に限界があります。
🍎 データーの保存:ESP8266でSDを使用すれば可能である。
_         iPad側でファイルに保存する事も可能です。
🍎 グラフ表示:一応出来た物の耐久性に不具合があり公開を見送りました。
_   原因は不明で現在 再勉強と調査検討中です。


 

広告

Written by macsbug

7月 29, 2016 at 2:49 am

カテゴリー: ESP8266, Pythonista

Control the ESP8266 in iPad

with 3 comments

iPad で ESP8266 をコントロールする iPadアプリを作りました。      2016.07.28
電子工作で iPad や iPhone との連携が容易に出来る様になります。
開発は iOSデバイス上で動作する統合開発環境 Pythonista 3 を使用します。


 

機能と動作:
1:iPad   :押したスイッチの信号をESP8266へ送る。
2:ESP8266:iPadからの信号でLEDの状態を把握しLEDをオンかオフにする。
3:ESP8266:LEDのオンオフ状態をiPadへフィードバックする。
4:iPad   :LEDがオンならスイッチを橙色、オフなら灰色にする。
5:iPad   :All Clear スイッチで全てのLEDをオフにし、2,3,4 を行う。
6:iPad   :Raed スイッチで ESP8266 LED の状態を読み込み 表示する。


 

iPhone, iPad の iOSアプリに Pythonista 3 (パイソニスタ)開発言語があります。

Pythonista 3:
_ iPad 上で編集し動作も可能。
_ Apple に開発費を支払う必要がない。
_ Pythonista 3 上や サイトに 詳細な Document がある。
_ Python の多くの記事やサンプルが使用できる。
_ サンプルが多数有り、UI 編集機能 の道具もあります。(以下の画像)
:
ユーザーインターフェース( UI )編集機能:
_ パネルデザイン:以下の様に UI 編集機能を使用しパネルのデザインを行います。
_ 部品の色や名前、アクション名(例:sw1)を設定し命令と接続できるようにします。


 

準備:
1. iPad:Pythonista 3 をインストール。(1200円)
_ パネルデザイン:UI 編集機能を使用し パネルのデザインを行います。
2. ESP8266 + LED:GPIO端子にLEDを接続。
3. WiFi 環境
4. iPad:UDP_test 又は UDP Tool+:UDP通信の確認。必要に応じで使用します。
_ UDP通信の物は 幾つかありますので無料のアプリを試してみてください。
5. Pythonista 3 の使用方法を練習してください。


 

通信方法と信号の流れ:
UDP通信( socket )で行い 家庭内のネットを使用します。
例:iPad IP = 192.168.100.22 , ESP8266 IP = 192.168.100.47
iPad 送信 → IP,PORT → ESP8266 : iPadからESP8266へ信号を送信する。
_ 例:iPad(192.168.100.22, 送信port=7000) →
_      → ESP8266(192.168.100.47, 受信port=9000)
iPad 受信 ← IP,PORT ← ESP8266 : ESP8266の信号をiPadで受信する。
_ 例:iPad(192.168.100.22, 受信port=9000) ←
_      ← ESP8266(192.168.100.47, 送信port=7000)


 

UDP通信の基礎

iPad UDP送信
例:”1″ を送信する。受信側のESP8266 の IP は ‘192.168.100.47’, Port=7000

import socket

HOST, PORT = '192.168.100.47', 7000
tx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
tx.sendto(bytes('1', 'utf-8'), (HOST, PORT))

iPad UDP受信
例:変数 d1 へ受信データーを入れる。受信の長さは 12 とした。Port=9000

import socket

rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
rx.bind(('', 9000))
d1 = str(rx.recv(12), 'utf-8')

メモ:UDP通信が それぞれ たったの4行で出来ます。
メモ:SOCK_DGRAM:UDPに使用する。21.21.4.2. socketserver.UDPServer Example
メモ:Pythonista 3 の編集は文字間のスペースや行間のスペースが必要です。


 

UDP通信の確認:
以下のiOSアプリでUDP通信の確認ができます。必要に応じて実施してみてください。
iPad:UDP_test アプリ(無料)による確認:
_ ESP8266への送信やESP8266からの受信の確認ができます。
_ このアプリが無ければ別のUDPアプリを探してください。

例:ESP8266 へ BME280 センサーを接続しUDP通信を行う。
上が iPadの送信:Sendボタンで “1” を IP=192.168.100.47,Port=7000 に送信。
下が iPadの受信:”1″ → ESP8266 → iPad(192.168.100.22,Port=9000) で受信。
_ ”1″ に対する受信内容は:t/1/ /
_ センサー の受信内容は:d/30.91/52.25/1007.13


Pythonista リスト:

import ui
import socket
import time

def sw1(s):tx.sendto(bytes('1', 'utf-8'), (HOST, PORT))
	
def sw2(s):tx.sendto(bytes('2', 'utf-8'), (HOST, PORT))
	
def sw3(s):tx.sendto(bytes('3', 'utf-8'), (HOST, PORT))
	
def sw4(s):tx.sendto(bytes('4', 'utf-8'), (HOST, PORT))

def sw5(s):tx.sendto(bytes('5', 'utf-8'), (HOST, PORT))
	
def sw6(s):tx.sendto(bytes('6', 'utf-8'), (HOST, PORT))
	
def clr(s):tx.sendto(bytes('0', 'utf-8'), (HOST, PORT))

def rea(s):tx.sendto(bytes('7', 'utf-8'), (HOST, PORT))
		
v = ui.load_view('cont_pnl')
v.background_color = '#d3dad7'
v.present('sheet')
HOST, PORT = '192.168.100.47', 7000
rx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
time.sleep(1)
rx.bind(('', 9000))
tx = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
on = '#ff6161'
of = '#5d5d5d'

while True:
	d1 = str(rx.recv(12), 'utf-8')
	
	if d1.find('1H') > -1:v['button1'].background_color = on
	
	if d1.find('1L') > -1:v['button1'].background_color = of
	
	if d1.find('2H') > -1:v['button2'].background_color = on

	if d1.find('2L') > -1:v['button2'].background_color = of
	
	if d1.find('3H') > -1:v['button3'].background_color = on
	
	if d1.find('3L') > -1:v['button3'].background_color = of
	
	if d1.find('4H') > -1:v['button4'].background_color = on
	
	if d1.find('4L') > -1:v['button4'].background_color = of
	
	if d1.find('5H') > -1:v['button5'].background_color = on
	
	if d1.find('5L') > -1:v['button5'].background_color = of
	
	if d1.find('6H') > -1:v['button6'].background_color = on
	
	if d1.find('6L') > -1:v['button6'].background_color = of
		
	d1 = ''

メモ:v.present(‘sheet’) : UIをデザインした大きさで表示。
メモ:v.present(”)   : UIを全画面の大きさで表示。
メモ:def sw1(s):tx.sendto(bytes(‘1’, ‘utf-8’), (HOST, PORT)):sw1を押したら”1″を送信する。
メモ:v = ui.load_view(‘cont_pnl’):UI cont_pnl を読み込み v と表現する。
メモ;d1 = str(rx.recv(12), ‘utf-8’):ESP8266のデーターを受信し d1 へ入れる。
メモ:if d1.find(‘1H’) > -1:v[‘button1’]:受信に”1H”があるならSW 1を橙色(on)にする。


 

ESP8266スケッチ:

 
// ESP8266 UDP transceiver and Receiver         // 2016.07.28 macsbug
// http://4009.jp/post/2016-04-25-esp-wroom-02/ 
#include <ESP8266WiFi.h>                        //
#include <WiFiUDP.h>                            //

WiFiUDP UDP;                                    //
char buff[32];                                  //
const char ssid[]="xxxx";                       // wifi ssid
const char pass[]="xxxx";                       // wifi password
const char iPhoneIP[]   = "192.168.100.22";     // iPhone iP
const int  iPhoneTxPort = 7000;                 // UDP Tx port
const int  iPhoneRxPort = 9000;                 // UDP Rx port
String all;                                     //
 
void setup()                                    //
  Serial.begin(115200);Serial.println();        //
  pinMode(D0, OUTPUT); digitalWrite(D0, LOW);   // 16, LED off
  pinMode(D1, OUTPUT); digitalWrite(D1, LOW);   //  5, LED off 
  pinMode(D2, OUTPUT); digitalWrite(D2, LOW);   //  4, LED off 
  pinMode(D3, OUTPUT); digitalWrite(D3, LOW);   //  0, LED off 
  pinMode(D4, OUTPUT); digitalWrite(D4, LOW);   //  2, LED off 
  pinMode(D5, OUTPUT); digitalWrite(D5, LOW);   // 14, LED off
  WiFi.softAP(ssid, pass);                      // WiFi connect
  UDP.begin(iPhoneTxPort);                      // iPhoneTxPort
}                                               //
 
void loop() {                                   //
  ESP.wdtDisable();                             //
  int rx = UDP.parsePacket();                   // packet size
  if (rx){                                      // recive
    int len = UDP.read(buff, rx);               // rx lengs
    if (len > 0){                               // rx action
      buff[len] = '\0';                         // Termination char
      int c = buff[0];                          // head haracter
      if ( c == '0' ){ all_clear();}            // 0, all off
      if ( c == '1' ){ sw(16, 1);}              // 1, LED 1 on/off
      if ( c == '2' ){ sw( 5, 2);}              // 2, LED 2 on/off
      if ( c == '3' ){ sw( 4, 3);}              // 3, LED 3 on/off
      if ( c == '4' ){ sw( 0, 4);}              // 4, LED 4 on/off
      if ( c == '5' ){ sw( 2, 5);}              // 5, LED 5 on/off
      if ( c == '6' ){ sw(14, 6);}              // 6, LED 6 on/off
      if ( c == '7' ){ allread();}              // 7, all read
      c = '9';                                  //
    }                                           //
  }                                             //
}                                               //

void sw(int gpio, int n){                       // gpio feed back
  if ( digitalRead(gpio) == 0 ){                // gpio ck = LOW
       digitalWrite(gpio, HIGH);                // SET LED ON 
       UDP.beginPacket(iPhoneIP, iPhoneRxPort); // UDP
       UDP.print( String(n) + "H");             // return LED ON 
       UDP.endPacket();                         // UDP
  } else {                                      // gpio ck = HI
       digitalWrite(gpio, LOW );                // SET LED OFF
       UDP.beginPacket(iPhoneIP, iPhoneRxPort); // UDP
       UDP.print( String(n) + "L");             // return LED OFF 
       UDP.endPacket();                         // UDP
  }                                             //
}                                               //

void all_clear(){                               // led all cler
  ESP.wdtDisable();                             //
  all = "";                                     //
  digitalWrite(D0, LOW); io(16, 1);             // 16 = LOW
  digitalWrite(D1, LOW); io( 5, 2);             //  5 = LOW 
  digitalWrite(D2, LOW); io( 4, 3);             //  4 = LOW 
  digitalWrite(D3, LOW); io( 0, 4);             //  0 = LOW 
  digitalWrite(D4, LOW); io( 2, 5);             //  2 = LOW 
  digitalWrite(D5, LOW); io(14, 6);             // 14 = LOW
  UDP.beginPacket(iPhoneIP, iPhoneRxPort);      // UDP feed back
  UDP.print( all );                             // 1L2L3L4L5L6L
  UDP.endPacket();                              // UDP
}

void allread(){                                 //
  ESP.wdtDisable();                             //
  all = "";                                     //
  io(16, 1);                                    // 16 = read
  io( 5, 2);                                    //  5 = read
  io( 4, 3);                                    //  4 = read 
  io( 0, 4);                                    //  0 = read
  io( 2, 5);                                    //  2 = read 
  io(14, 6);                                    // 14 = read
  UDP.beginPacket(iPhoneIP, iPhoneRxPort);      // UDP feed back
  UDP.print( all );                             // 1x2x3x4x5x6x
  UDP.endPacket();                              // UDP
}                                               //

参照:
Pythonista 3:A Full Python IDE for iOS
Pythonista 3:Pythonista Documentation
ひとりぶろぐ:iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る
りんごがでている:PythonistaのためのJulia100問100答
hanaken_Nirvana:~Pythonistaより愛をこめて贈る入門者のためのTips①~
hanaken_Nirvana:~Pythonistaより愛をこめて贈る入門者のためのTips②~
scipy-lectures.org:1.4. Matplotlib: plotting
matplotlib.org:matplotlib


感想:
🍎 iPad や iPhone を電子工作のディスプレーやコントローラーに使用できると
_ 素晴らしい事が出来る。そこで 基本的なUDP通信ソフトを作り動きました。
_ これにより だれでも開発ができる様になれば良いかなと思っています。
🍎 経過:Python言語が全く解らない状態で始め1行の理解に1日かかる状態。
_ それでもなんとか動作する様になると楽しくなってきますね。
_ 理解すれば動くという事。進めて行くと この言語の凄さに驚く!
_ なんと数行で数値計算をグラフやウエブの内容を表示できる事に驚く!
_ グラフではヒストグラムを1行でできる事にも驚嘆する。
_ さらに Python 言語の記事やサンプルは多数有り 先人の知識を使用できる。

🍎 Pythonista 3 : ひとりぶろぐ氏の記事、、
_ 「iOS上で動作する革命的ものづくり環境「Pythonista 3」の魅力をとくと語る
_ で触発されました。是非 お読みください。感謝!
🍎 UDP通信:7of9氏の「UDPで送信できた」を参照させて頂きました。感謝!

🍎 Pythonista 3 編集機能:指やパネルキーで出来る様になっている。
_ キー入力は予想を立てた文字が表示され押すだけで命令を一気に入力できる。
_ 色の数値を設定するにはカーソルを起き 指で押すとカラーパネルが出て来て
_ 色を選択してInstallすると命令に追加される。、、いやはや驚きの連続!

🍎 自作例:ESP8266からの温度,湿度,気圧を iPad で受信し数値で表示できた
_ 事とグラフに表示できました。工夫すれば ThingSpeek等のクラウドを使用
_ した方法は不要になるかも知れません。
_ その後に今回のコントローラーを作り今回の記事にしました。
🍎 フィードバック機能:電子工作で重要な機能はフィードバックが出来る事。
_ それが出来ると自動制御が可能になると言う訳ですね。
🍎 課題:家庭内のネットを使用せず iPad と ESP8266 間で直接通信するには
_ どうような方法でおこなうのか?


 

Written by macsbug

7月 28, 2016 at 8:42 am

カテゴリー: ESP8266, Pythonista

WA-MIKAN

leave a comment »

WA-MIKAN(和みかん) 基板は 8月に秋月で販売予定。                             2016.07.13
LDOは、新日本無線株式会社の NJM2845DL1-33 800mA。
マイクロSDカードスロット搭載。


詳細:WA-MIKAN(和みかん)説明資料 に詳しく書かれています。

設計者の山本 三七男氏によると
来月発売になるのは、WA-MIKANというボードです。
SD-WiFiボードの発展形です。GR-CITRUSに接続するように作られていますが、
単独でも動作できるように設計しています。
最終回路図は、まだ、公開できていませんが、ほとんど同じものが、
下記URLに公開しています。 、、、と述べています。

機能:
WA-MIKAN1.7:資料は内容が詳細に書かれています。
_ USB端子に Fuse(F01)がありボード及び接続するPCのUSBの保護が出来ている。
_ EN端子に 確実な動作の為の Capacitor(C4 0.1uF) がある。
_ RESET端子に Capacitorはない。(スイッチサイエンスも同様)
_ SD Card 用に端子を使用している為、空きの端子を確認する事。
_ 単独で使用する場合:USB接続は別に用意する必要がある。
_ 単独で使用する場合:自動書込みの機能は無い。
_ 単独で使用する場合:外部電源が必要です。


予想価格:他の方からの情報では、「来月、秋月から、、1,000円か980円かで出る」
、、と聞いています。


感想:
LDO:新日本無線株式会社の NJM2845DL1-33 はドロップ電圧が少なく高性能です。
SD CARD Slot: 新たに素晴らしい事が出来る様になります。
_ SDから起動が出来る。
_ SDを交換するだけで異なるスケッチが動作する。
_ 大きなHTML文や画像を沢山保存できる。
_ データーロガーになる。
_ 無線環境が無くともデーターを保持できる。


 

Written by macsbug

7月 13, 2016 at 5:42 am

カテゴリー: ESP8266

Learning ESP8266

with 3 comments

2016年7月1日、ESPRESSIFはオライリーアニマルブックシリーズに参加し
Learning ESP8266」を2017年1月に出版するとの事。                                    2016.07.13


ESP8266 Joins the O’Reilly Animal Books Series:Learning ESP8266
著者はあの有名なAlasdair Allan氏:写真はgithubの画像をリンク。


販売:
Learning ESP8266 は、O’REILLY Shop Books で pre-order中($29.99)です。


著者:
Alasdair Allan氏は「iOS Sensor Apps with Arduino」
「Learning iOS Programming, 2nd Edition」等々多数
の著者でもあります。

記憶にあると思いますが、2011年4月に「iPhoneや3G iPadが手に入れましたか?
Appleはあなたの移動を記録しています  の件で ビデオでは
「我々はファイルが発見された方法」を議論されています。

Make:Installing and Building an Arduino Sketch,,,2015年4月では、
インストールArduinoのIDEのカスタムビルドは、本当に簡単にできませんでした。
私はMac上だし、、、、”と苦労話が書かれています。


感想:
発売日は 2017年1月で待ちきれない感じです。
オライリーアニマルブックシリーズでの表紙は ゴキブリ? なのでしょうか。コメツキムシでした。
何冊か購入していますが 画像の雰囲気にちょっと戸惑うというか合っている?

Written by macsbug

7月 13, 2016 at 4:35 am

カテゴリー: ESP8266