2017年10月5日 星期四

Arduino LCD1602練習筆記

LCD 1602顯示元件

目的

輸入字串顯示在LCD

元件

1.Arduino UNO
2.LCD1602+LCM1602IIC

線路圖


/*
 * LCD練習
 */
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,16,2);

void setup() {
  Serial.begin(9600);
  lcd.init();  //初始化
  lcd.backlight(); //開啟背光
  lcd.print("Welcome"); //輸出字串至LCD
  delay(1000);
  lcd.clear(); //字串輸出清除
}

void loop() {
  SerialLcd();
}

void SerialLcd(){

  if(Serial.available())
  { delay(50);
    lcd.clear();

  while(Serial.available()>0)
  lcd.write(Serial.read());
}
}

輸入字串後,即可在LCD顯示輸入內容

2017年10月4日 星期三

Arduino 按鈕改變LED亮度練習

目的:使用一個按鈕控制LED燈亮度

元件:

1.Arduino UNO
2.LED
3.電阻1k歐姆
4.按鈕

線路圖


 /*
 *按鈕控制LED亮度
 */
#define LED 9
#define Button 10

int val=0;
int old_val=0;
int state=0;
int brightness=64;
unsigned long startTime=0;

void setup(){
   pinMode(LED,OUTPUT);
   pinMode(Button,INPUT);
}

void loop(){
   val=digitalRead(Button); //更新按鈕狀態
//按鈕剛按下時
  if((val==HIGH) && (old_val==LOW))
  {
    state=1-state;             //更改狀態(由OFF->ON)
    startTime=millis();    //儲存目前經過時間
    delay(10);
  }

//按鈕已按下時
if((val==HIGH) && (old_val==HIGH))
  {
     if(state==1&&(millis()-startTime)>500) //按鈕被按下超過500ms時
     {
    brightness++;
    delay(10);
    if(brightness>255)
    brightness=0;
      }
   }
old_val=val;  //儲存目前狀態

//當state為on時
 if(state==1)
analogWrite(LED,brightness);
else
analogWrite(LED,0);
}

2017年9月13日 星期三

ARDUINO與ESP8266 ESP01 WIFI 使用AT通訊紀錄2

AT指令:

1. AP模式

1-1.AP指令

(1)重啟模塊 : AT+RST
(2)設置模塊 :AT+CWMODE=<mode>
<mode>:1.Station模式 2.AP模式 3.AP+Station模式
指令:AT+CWMODE=2 or AT+CWMODE=3
附註:需重啟模塊後生效
(3)配置AP參數 :AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>
(only AP模式使用)
<ssid>:字串,接入點名稱
<pwd>:字串,密碼最長64Bytes
<chl>:通到號
<ecn>:0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK
(4)查看以接入設備IP:AT+CWLIF
(5)查詢本機IP:AT+CIFSR
AP模式禁用,可能當機

1-2.Server傳送

(1)開啟多連接模式:AT+CIPMUX=<mode>
<mode>:0.單路連結模式 1.多路連結模式
指令:AT+CIPMUX=1
(2)創建伺服器:AT+CIPSERVER=<mode>[,<port>]
<mode>:0.關閉server模式 1.開啟server模式
<port>:端口號,預設值:333
指令:AT+CIPSERVER=1,8080
附註:
1)AT+CIPMUX=1時才可開啟伺服器,關閉server模式需重啟
2)開啟server後自動建立監聽,當有client接入會自動按順序暫用一個連接

(3)設置服務器愈時時間:AT_CIPSTO=<time>
<time>:服務器愈時時間 0~2880
(4)建立客戶端
下載測試軟體USR-TCP232-Test
http://www.usriot.com/usr-tcp-test-testing-software/

















TCP Client已連線192.168.2.105,8080

(5)查看當前連接:AT+CIPSTATUS
(6)向某個連結發送數據:AT+CIPSEND=<id>,<length>
<id>接收端的id
<length>發送數據的長度
指令:AT+CIPSEND=0,10
顯示">"後可輸入傳送字串"HAPPY TIME"
Receive AS HEX:需取消勾選,才可顯示字串

1-3.Client傳送

(1)關閉server服務:AT+CIPSERVER=0 
(2)重啟模塊:AT+RST

(3)建立Server端,使用軟體USR-TCP232

(4)開啟多連接模式:AT+CIPMUX=1
(5)建立TCP連接:AT+CIPSTART=0,"TCP","192.168.2.104",8080  
備註:
<id>:0-4,連接的id號
<type>:字串參數,連接類型,”TCP”-建立TCP連接,”UDP”-建立UDP連接
<addr>:字串參數,遠程服務器IP地址
<port>:遠程服務器端口號
(6)向某個連結發送數據:AT+CIPSEND=0,10

指令輸入完成後

接收數據"HAPPY TIME"

ARDUINO與ESP8266 ESP01 WIFI 使用AT通訊紀錄1

目的

使Arduino UNO R3與ESP8266-ESP01建立AT通訊

使用主要元件:

  • Arduino UNO R3
  • ESP8266-ESP01 WIFI模塊



接線圖


使用Arduino下達AT命令

1.以下為Arduino MEGA 2560與ESP8266 通訊

/*
* Arduino MEGA2560與ESP8266 AT通訊
*/
void setup() {
Serial1.begin(9600); //RX1/TX1,即 Pin18 及 Pin19
Serial.begin(9600); //RX0/TX0
}

void loop() {
if (Serial1.available()) {
Serial.write(Serial1.read());
}

if (Serial.available()) {
char chars = Serial.read();
Serial1.write(chars);
}

2.以下為Arduino Uno 與ESP8266 通訊

/*
* Arduino UNO與ESP8266 AT通訊
*/
#include <SoftwareSerial.h>
SoftwareSerial WIFI(4,5);// make RX Arduino line is pin 4, make TX Arduino line is pin 5.
void setup() {
WIFI.begin(9600); //RX1 TX1,軟體模擬通訊
Serial.begin(9600); //RX0/TX0

}

void loop() {
if (WIFI.available()) {
Serial.write(WIFI.read());
}

if (Serial.available()) {
char chars = Serial.read();
WIFI.write(chars);
}
}


通訊連線測試

(1)輸入"AT"
(2)回應"OK"
通訊成功狀態

Arduino LCD1602練習筆記

LCD 1602顯示元件 目的 輸入字串顯示在LCD 元件 1.Arduino UNO 2.LCD1602+LCM1602IIC 線路圖 /*  * LCD練習  */ #include <LiquidCrystal_I2C.h> LiquidCryst...