OLEDをArduinoとAndroidでコントロールしてみた! [Arduino]
OLEDをせっかくESP-WROOM-02で制御できるようにしたので、WiFi経由でAndroidスマホでコントロールしてみることにしました。
ESP-WROOM-02側の配線は前回と同じです。
AndroidのプログラムはESP-WROOM-02でWiFiでLチカしたプログラムを流用しました。画像は3種類用意をしていてボタンで切り替えます。
プログラムを下記に示します。長いのでAsyncSocketは省略しました。詳しくはこちらを参照してください。
ESP-WROOM-02のスケッチを示します。画像データや一部コードは長いので省略をしています。
詳しくはこちらを参照してください。
ESP-WROOM-02 はメモリ容量が意外に大きいので画像データを3種類準備してもなんなく格納できてしまいました。それでは実際に動かしてみましょう。
こうやって動きがあると楽しいものですね。OLEDでやりたいことは大体出来たので次はカメラモジュールにチャレンジしてみようかな。
(^_^)/~
ESP-WROOM-02側の配線は前回と同じです。
AndroidのプログラムはESP-WROOM-02でWiFiでLチカしたプログラムを流用しました。画像は3種類用意をしていてボタンで切り替えます。
プログラムを下記に示します。長いのでAsyncSocketは省略しました。詳しくはこちらを参照してください。
public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText mEditText = null; private TextView mText = null; private Button mOledLaugh = null; private Button mOledCry = null; private Button mOledAngry = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mEditText = (EditText)findViewById(R.id.edittext); mText = (TextView)findViewById(R.id.result); mOledLaugh = (Button)findViewById(R.id.laugh); mOledCry = (Button)findViewById(R.id.cry); mOledAngry = (Button)findViewById(R.id.angry); mOledLaugh.setOnClickListener(this); mOledCry.setOnClickListener(this); mOledAngry.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.laugh: sendOperation("LAUGH"); Log.v("OLED" ,"LAUGH"); break; case R.id.cry: sendOperation("CRY"); Log.v("OLED", "CRY"); break; case R.id.angry: sendOperation("ANGRY"); Log.v("OLED", "ANGRY"); break; default: } } private void sendOperation(String OnOff) { String editText = mEditText.getText().toString(); String ip_and_port[] = editText.split(":"); AsyncSocket socket = new AsyncSocket(ip_and_port[0], ip_and_port[1], mText); socket.execute(OnOff); socket = null; } }
ESP-WROOM-02のスケッチを示します。画像データや一部コードは長いので省略をしています。
詳しくはこちらを参照してください。
#include <Wire.h> #include <ESP8266WiFi.h> const int OLED_ADDR = 0x3C; const int RESET_pin = 2; const char* ssid = "your ssid"; const char* password = "your password"; WiFiServer server(8080); WiFiClient client; void connectWiFi(const char* ssid ,const char* password) { WiFi.disconnect(); WiFi.mode(WIFI_STA); WiFi.begin(ssid ,password); while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print("."); } Serial.println(); Serial.println("WiFi connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); } void WriteCommand(byte cmd) { Wire.write(0x80); Wire.write(cmd); } void resetOLED() { digitalWrite(RESET_pin, HIGH); delay(1); digitalWrite(RESET_pin, LOW); delay(2); // reset 2msec digitalWrite(RESET_pin, HIGH); } void initOLED() { // 長いので省略 } void clearScreen() { // 長いので省略… } void drawNyaha(const unsigned char data[]) { int i,j,k,n; for (i = 0; i < 8; ++i) { Wire.beginTransmission(OLED_ADDR); WriteCommand(0xB0 + i); WriteCommand(0x10); WriteCommand(0x00); Wire.endTransmission(); // Need to consider the Wire library limitation of sending data up to 32 bytes. for (j = 0; j < 8; ++j) { Wire.beginTransmission(OLED_ADDR); Wire.write(0x40); for (k = 0; k < 16; ++k) { n = i*128+j*16+k; Wire.write(data[n]); } Wire.endTransmission(); } } } const unsigned char laugh [] = { // 長いので省略… }; const unsigned char cry [] = { // 長いので省略… }; const unsigned char angry [] = { // 長いので省略… }; void setup() { pinMode(RESET_pin, OUTPUT); Wire.begin(12, 14); // SDA is pin12, SCK is pin14 Serial.begin(115200); Serial.println("Reset OLED"); resetOLED(); Serial.println("\nInit OLED"); initOLED(); clearScreen(); delay(2); drawNyaha(laugh); // Setup WiFi connectWiFi(ssid ,password); server.begin(); client = server.available(); } void loop() { while ((WiFi.status() != WL_CONNECTED)) { connectWiFi(ssid ,password); } while (!client) { client = server.available(); delay(1); } while (!client.available()) { delay(1); } Serial.println("client connected"); String res = client.readStringUntil('\n'); Serial.println(res); client.flush(); client.stop(); if (res.equals("LAUGH")) { drawNyaha(laugh); } else if (res.equals("CRY")) { drawNyaha(cry); } else if (res.equals("ANGRY")) { drawNyaha(angry); } else { Serial.println("ERROR"); } }
ESP-WROOM-02 はメモリ容量が意外に大きいので画像データを3種類準備してもなんなく格納できてしまいました。それでは実際に動かしてみましょう。
こうやって動きがあると楽しいものですね。OLEDでやりたいことは大体出来たので次はカメラモジュールにチャレンジしてみようかな。
(^_^)/~
ディアイワイモール (DIYmall) iic i2c OLEDモジュール ディスプレイ 0.96インチ 51マイクロコントローラ12864 for Arduino (ホワイト)
- 出版社/メーカー: Flyfun
- メディア: おもちゃ&ホビー
ESP-WROOM-02実装済みmikroBUS(R)対応ブレークアウトボード
- 出版社/メーカー: マイクロテクニカ
- メディア: おもちゃ&ホビー
FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き)
- 出版社/メーカー: スイッチサイエンス
- メディア: エレクトロニクス
コメント 0