本系統(tǒng)為安卓APP的環(huán)境參數(shù)遠程監(jiān)控系統(tǒng),以STM32F103單片機作為本設(shè)計的中控中心,結(jié)合物聯(lián)網(wǎng)技術(shù),以Android智能手機作為遠程控制的客戶端,通過8266 WiFi模塊實現(xiàn)環(huán)境監(jiān)控系統(tǒng)硬件與Android手機的交互、環(huán)境參數(shù)的反饋,并實時提醒用戶采取措施,具有異常報警功能。
使用的軟件為keil5 和Android studio
Screenshot_20190120_230955_com.myself.jpg (495.82 KB, 下載次數(shù): 53)
下載附件
2019-1-27 14:51 上傳
IMG_20190120_230923.jpg (2.06 MB, 下載次數(shù): 57)
下載附件
2019-1-27 14:51 上傳
STM32程序:
主要編寫串口、中斷。ESP8266驅(qū)動程序網(wǎng)上有很多,可以直接拿來使用,本系統(tǒng)使用的是ESP8266的AP模式,在下位機中先設(shè)置好模式:
代碼為:
u3_printf(“AT+CWMODE=2\r\n”);
delay_ms(1000);
u3_printf(“AT+CWSAP=“ESP8266”,“12345678”,11,3\r\n”);
delay_ms(1000);
u3_printf(“AT+RST\r\n”);
delay_ms(3000);
u3_printf(“AT+CIPMUX=1\r\n”);
delay_ms(2000);
u3_printf(“AT+CIPSERVER=1,5000\r\n”);
delay_ms(1000);
主要了解8266的AT指令即可,現(xiàn)在都是集成好了的,使用非常方便。
串口代碼:
void u3_printf(char* fmt,…)
{
u16 i,j;
va_list ap;
va_start(ap,fmt);
vsprintf((char*)USART3_TX_BUF,fmt,ap);
va_end(ap);
i=strlen((const char*)USART3_TX_BUF);
for(j=0;j<i;j++)
{
while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);
USART_SendData(USART3,USART3_TX_BUF[j]);
}
}
APP程序:
public class MainActivity extends Activity {
private EditText pass;
private Button next;
private Button over;
private EditText pass_new;
SharedPreferences pass_word =null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle(“登陸界面”);
setContentView(R.layout.activity_main);
Init();
pass_word = getSharedPreferences(“setting”, Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = pass_word.edit();
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String now=pass.getText().toString();
// now="12345";
String pas = pass_word.getString("name","12345");
//Intent intent = new Intent();
//intent.setClass(MainActivity.this,ShowActivity.class);
//startActivity(intent);
if(pas.equals(now))
{
Intent intent = new Intent();
intent.setClass(MainActivity.this,ShowActivity.class);
startActivity(intent);
}
else{
Toast.makeText(MainActivity.this, "密碼錯誤", Toast.LENGTH_LONG).show();
}
}
});
over.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String now=pass.getText().toString();
String pas = pass_word.getString("name","12345");
if(pas.equals(now))
{ new AlertDialog.Builder(MainActivity.this)
.setTitle("請輸入新密碼")
.setIcon(android.R.drawable.ic_dialog_info)
.setView(pass_new)
.setPositiveButton("確定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which)
{
save() ;
}
})
.setNegativeButton("取消", null)
.show();
}
else{
Toast.makeText(MainActivity.this, "請輸入初始密碼", Toast.LENGTH_LONG).show();
}
}
});
protected void onResume() {
if(getRequestedOrientation()!=ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_REVERSE_LANDSCAPE);
}
super.onResume(); }
1
void Init()
{
pass=(EditText) findViewById(R.id.et_pass);
next=(Button) findViewById(R.id.access);
over=(Button) findViewById(R.id.over);
// pass_new= new EditText(MainActivity.this);
}
void save()
{
String now=pass_new.getText().toString();
Editor editor =pass_word.edit();
editor.putString(“name”, now);
editor.commit();
|
|
– –
– –
}
}
|