本系统为安卓APP的环境参数远程监控系统,以STM32F103单片机作为本设计的中控中心,结合物联网技术,以Android智能手机作为远程控制的客户端,通过8266 WiFi模块实现环境监控系统硬件与Android手机的交互、环境参数的反馈,并实时提醒用户采取措施,具有异常报警功能。
使用的软件为keil5 和Android studio
STM32程序:
主要编写串口、中断。ESP8266驱动程序网上有很多,可以直接拿来使用,本系统使用的是ESP8266的AP模式,在下位机中先设置好模式:
代码为:
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指令即可,现在都是集成好了的,使用非常方便。
串口代码:
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();
|
|
– –
– –
}
}
|