Arduino教學-使用ESP8266 wifi模組+DHT 溫溼度感測器上傳thingspeak

這是透過Arduino+ESP8266(wifi)+DHT(溫溼度感測器),實現每60秒上傳溫溼度到thingspeak網站的記錄。
一、上 Thingspeak 申請帳號,然後建立一個Channel後,然後取得Write API Key。(https://thingspeak.com)
二、DHT連線
DHT → Arduino
S → A0
+ → 5V (VCC)
– → GND
三、ESP8266
ESP8266 → Arduino
GND → GND
UTXD → RX(0)
CH_PD → 3.3V (VCC 注意:連接USB時不要接上,不然會抓不到,程式上傳後,直接用變壓器)
URXD → TX(1)
VCC → 3.3V (VCC)
四、USB轉TTL (作為監測用)
USBTTL → Arduino
TXD(綠)→ 2
RXD(白)→ 3
l_140820105419
腳位圖
20691_10152621979171541_6306184665770254413_n

11024717_10152621978966541_3990729037825987143_n

未命名 - 5
程式碼
[c]
#include <SoftwareSerial.h>
#define DEBUG
#define _baudrate 9600

// USB TTL 偵錯用
#define _rxpin 2
#define _txpin 3
SoftwareSerial debug( _rxpin, _txpin ); // RX, TX

// DHT溫溼度感測器
#define dht_dpin A0
byte bGlobalErr;
byte dht_dat[5];

// ESP8266 Wifi晶片
#define SSID "[無線分享器名稱]"
#define PASS "[無線分享器密碼]"
#define IP "184.106.153.149" // ThingSpeak的IP
// 使用 GET 傳送資料的格式
String GET = "GET /update?key=[Write API Key]";

void setup() {
InitDHT();
Serial.begin( _baudrate );
debug.begin( _baudrate );
delay(300);
sendDebug("AT");
delay(5000);
if(Serial.find("OK"))
{
debug.println("RECEIVED: OK\nData ready to sent!");
connectWiFi();
}
delay(700);
}

void loop() {
ReadDHT();
switch (bGlobalErr){
case 0:
String TT,HH;
HH = String(dht_dat[0])+’.’+String(dht_dat[1]);
TT = String(dht_dat[2])+’.’+String(dht_dat[3]);
updateDHT11( TT, HH );
#ifdef DEBUG
debug.print("Humidity: ");
debug.print( HH );
debug.print(" %\t");
debug.print("Temperature: ");
debug.print( TT );
debug.println(" *C\t");
#endif

}
delay(60000); // 一分鐘一次
}

void updateDHT11( String T, String H )
{
// 使用AT指令上傳
String cmd = "AT+CIPSTART=\"TCP\",\"";
cmd += IP;
cmd += "\",80";
sendDebug(cmd);
delay(2000);
if( Serial.find( "Error" ) )
{
debug.print( "RECEIVED: Error\nExit1" );
return;
}

cmd = GET + "&field1=" + T + "&field2=" + H +"\r\n";
Serial.print( "AT+CIPSEND=" );
Serial.println( cmd.length() );
if(Serial.find( ">" ) )
{
debug.print(">");
debug.print(cmd);
Serial.print(cmd);
}
else
{
sendDebug( "AT+CIPCLOSE" );
}
if( Serial.find("OK") )
{
debug.println( "RECEIVED: OK" );
}
else
{
debug.println( "RECEIVED: Error\nExit2" );
}
}

void sendDebug(String cmd)
{
// 傳到 USB TTL
debug.print("SEND: ");
debug.println(cmd);
Serial.println(cmd);
}

boolean connectWiFi()
{
// 連線到Wifi
Serial.println("AT+CWMODE=1");
delay(2000);
String cmd="AT+CWJAP=\"";
cmd+=SSID;
cmd+="\",\"";
cmd+=PASS;
cmd+="\"";
sendDebug(cmd);
delay(5000);
if(Serial.find("OK"))
{
debug.println("RECEIVED: OK");
return true;
}
else
{
debug.println("RECEIVED: Error");
return false;
}

cmd = "AT+CIPMUX=0";
sendDebug( cmd );
if( Serial.find( "Error") )
{
debug.print( "RECEIVED: Error" );
return false;
}
}
void InitDHT(){
// 初始化DHT
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
}

void ReadDHT(){
bGlobalErr=0;
byte dht_in;
byte i;
digitalWrite(dht_dpin,LOW);
delay(20);

digitalWrite(dht_dpin,HIGH);
delayMicroseconds(40);
pinMode(dht_dpin,INPUT);

dht_in=digitalRead(dht_dpin);

if(dht_in){
bGlobalErr=1;
return;
}
delayMicroseconds(80);
dht_in=digitalRead(dht_dpin);

if(!dht_in){
bGlobalErr=2;
return;
}
delayMicroseconds(80);
for (i=0; i<5; i++)
dht_dat[i] = read_dht_dat();
pinMode(dht_dpin,OUTPUT);
digitalWrite(dht_dpin,HIGH);
byte dht_check_sum =
dht_dat[0]+dht_dat[1]+dht_dat[2]+dht_dat[3];
if(dht_dat[4]!= dht_check_sum)
{bGlobalErr=3;}
};

byte read_dht_dat(){
byte i = 0;
byte result=0;
for(i=0; i< 8; i++){
while(digitalRead(dht_dpin)==LOW);
delayMicroseconds(30);
if (digitalRead(dht_dpin)==HIGH)
result |=(1<<(7-i));
while (digitalRead(dht_dpin)==HIGH);
}
return result;
}

[/c]

Delphi控制Arduino紅綠燈與LCD

最近開始學著使用Arduino來做一些簡單的控制,對於只學商完全不懂電子、電路的人真的是一大福音!很快就能上手~
當然最終還是希望能與電腦做搭配控制,寫了個簡單的程式控制紅、黃、綠燈,並在LCD液晶顯示器顯示目前亮的是Red/Yellow/Blue LED.
[c]
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 16, 2);
int redled =10;
int yellowled =7;
int blueled =4;
void setup()
{
Serial.begin(9600);
pinMode(redled, OUTPUT);
pinMode(yellowled, OUTPUT);
pinMode(blueled, OUTPUT);
lcd.begin();
lcd.clear();
lcd.backlight();
lcd.print("Lin Shou Shan");

}

void loop()
{
char s;
if (Serial.available()>0){
s=(char) Serial.read();
lcd.clear();
digitalWrite(redled, LOW);
digitalWrite(yellowled, LOW);
digitalWrite(blueled, LOW);
if(s==’R’){
digitalWrite(redled, HIGH);
lcd.print("Red LED");
}
if(s==’Y’){
digitalWrite(yellowled, HIGH);
lcd.print("Yellow LED");
}
if(s==’B’){
digitalWrite(blueled, HIGH);
lcd.print("Blue LED");
}
}
}
[/c]

[pascal]
procedure TForm1.Button1Click(Sender: TObject);
begin
Comm1.StopComm;
COMM1.CommName := ‘COM6’;
COMM1.StartComm;
end;

procedure TForm1.Button2Click(Sender: TObject);
var s:AnsiString;
begin
s:=”;
s:= TButton(Sender).Hint;
Comm1.WriteCommData(PAnsiChar(s),Length(s)); //送出指令給遠端
end;
[/pascal]

Object Pascal Handbook by Marco Cantu 書籍推薦 (內容更新)。

訊息來源:廖啟甫 前輩
Object Pascal Handbook by Marco Cantu 書籍推薦 (內容更新)。
Win32, Win64, MacOSX, iOS and Android 跨平台和移動開發書籍,
合法註冊用戶免費下載。
ID: 30018, Object Pascal Handbook by Marco Cantu
http://cc.embarcadero.com/item/30018
書籍大綱:
Chapter 1: Coding in Pascal
Chapter 2: Variables and Data Types
Chapter 3: Language Statements
Chapter 4: Procedures and Functions
Chapter 5: Arrays and Records
Chapter 6: All About Strings
Chapter 7: Objects
Chapter 8: Inheritance
Chapter 9: Handling Exceptions
Chapter 10: Properties and Events (內容更新)
Chapter 11: Interfaces (內容更新)
Chapter 12: Manipulating Classes (內容更新)
Chapter 14: Generics
Chapter 15: Anonymous Methods
Chapter 16: Reflection and Attributes (內容更新)
Appendix A: The Evolution of Object Pascal
Appendix B: Glossary of Terms (內容更新)

Delphi Xe7開發iOS 8.1.3程式現階段解決方式

最近幾天的iOS版本已經升級到8.1.3了,如果您在開發時遇到

  1. 打開 XE7
  2. 進入 File->Open, 輸入 %AppData% 按Open開啟路徑
  3. 進入到  Embarcadero\BDS\15.0 然後選擇 Entitlement.TemplateiOS 打開
  4. 打開Mac的鑰匙圈管理選擇iPhone Developer certificate然後按右鍵,去看Organizational Unit identifier
  5. 回到Xe7中,在Entitlement.TemplateiOS.xml中加入
  6. [xml]
    <key>application-identifier</key>
    <string>OrganizationalUnit.$(ModuleName)</string>
    [/xml]

 

史丹佛大學2015年免費iOS開發課程也使用swift語言

美國史丹佛大學從2010年開始就開設了CS193P的網路iOS開發課程,也成了許多開發入門新手的必看聖經之一。今年(2015年)也有新的版本,也採用了swift/XCode6做為新的教學語言。

由於Apple發表新的語言-Swift後,就致力在推廣這個比Objective-C擁有更多優點的語言,所以大部份的學校也開始跟隨apple腳步轉向swift,想要從事iOS開發的朋友也不要錯過這個課程。

 

課程連結:

Delphi取得目前檔案位置名稱路徑

[pascal]
// 假如程式路徑在 c:\projects\bin\project1.exe
ShowMessage(‘Drive = ‘+ExtractFileDrive (Application.Exename)); //C:
ShowMessage(‘Dir = ‘+ExtractFileDir (Application.Exename)); //c:\projects\bin
ShowMessage(‘Path = ‘+ExtractFilePath (Application.Exename)); //c:\projects\bin\
ShowMessage(‘Name = ‘+ExtractFileName (Application.Exename)); //project1.exe
ShowMessage(‘OnlyName =’+ChangeFileExt(ExtractFileName(Application.Exename), ”)); //project1
ShowMessage(‘Ext = ‘+ExtractFileExt (Application.Exename)); //.exe
[/pascal]

Delphi&C++Builder的iOS 64-bit Release Plans線上研討會

由於XE7目前仍未支援iOS 64位元的程式編譯功能,但蘋果 App 於 2015年02月01日 上架必須支援 64位元,於是明天(27日)凌晨一點鐘,有一場同步的iOS 64-bit Release Plans線上研討會。如果有時間的朋友可以上網聽一下。

報名網址: http://forms.embarcadero.com/RADiOS64Webinar?cif=701G0000000wIGp

美安Shop.com夥伴商店網站串接方式

美安原本是一家蠻有歷史的直銷公司,後來買下Shop.com後變成了世界知名網路購物網站。而最有亮點的大概是現金回饋方式。

舉個例子:你到良興購物網(EcLife)買電競滑鼠990元,直接連進去的話,他標990元,你就要買990元。

不過透過Shop.com的夥伴商店連結,可以給你2%的現金回饋,也就是990的電競滑鼠可以省下19.8元。

或是到華航買機票也是有2%的現金回饋~

如何讓你架設的網站,也能與美安串接呢?

1) 訂單新增一個欄位 RID VARCHAR(255)

2) 從夥伴商店連接進來的網址大概長得像 http://www.eclife.com.tw/index.aspx?RID=C1234567-u2687516322-v247163

3) 後面的RID就是我們要的,把它記錄起來(丟到COOKIE或是塞進input)
[php]
setcookie("SHOPCOMRID", $_GET[‘RID’]);
if(isset($_COOKIE[‘SHOPCOMRID’]))
{
$RID = $_COOKIE[‘SHOPCOMRID’];
}
[/php]

4) 最後每個月要出報表
1.交易日期
2.訂單編號(自訂/唯一值)
3.買家姓名
4.RID編號
5.產品名稱/代碼
6.網站零售價格
7.佣金金額(例:網站零售價格*2%)