精华内容
下载资源
问答
  • wifi传文件app
    万次阅读 多人点赞
    2021-04-25 15:44:10

    事物的难度远远低于对事物的恐惧
    完成对STM32单片机和ESP8266 WiFi模块的配置之后,接下来需要完成Android APP代码的编写以及实现。

    1.添加网络权限

    因为我们需要对WiFi进行操作,所以需要网络的权限,在AndroiManifest.xml文件中加入以下代码:

    <uses-permission android:name="android.permission.INTERNET" />
    

    2.建立TCP连接

    首先通过文本输入控件得到IP地址和端口号,然后建立Socket连接。

    case R.id.btn_turn:
                    if (mSocket == null || !mSocket.isConnected()) {
                        if(!TextUtils.isEmpty(mText_ip.getText()) && !TextUtils.isEmpty(mText_port.getText())){
                            mip = mText_ip.getText().toString();
                            mport = Integer.parseInt(mText_port.getText().toString());
                            Log.i(TAG, "onClick: "+mport);
                            mConnectThread = new ConnectThread(mip, mport);
                            mConnectThread.start();
                        }else if(TextUtils.isEmpty(mText_ip.getText())){
                            Toast.makeText(this,"请输入IP地址",Toast.LENGTH_SHORT).show();
                        }else if(TextUtils.isEmpty(mText_port.getText())){
                            Toast.makeText(this,"请输入端口号",Toast.LENGTH_SHORT).show();
                        }
                    }
                    if (mSocket != null && mSocket.isConnected()) {
                        try {
                            mSocket.close();
                            mSocket = null;
                            mBtn_turn.setText("连接");
                            Toast.makeText(this, "连接已断开", Toast.LENGTH_SHORT).show();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                    break;
    

    上述代码是通过按钮点击事件获得到IP地址和端口号,然后通过创建一个ConnectThread类对象并调用里面的run()方法实现TCP连接。该类的代码如下:

    private class ConnectThread extends Thread {
            private String ip;
            private int port;
            public ConnectThread(String ip, int port) {
                this.ip = ip;
                this.port = port;
            }
            @Override
            public void run() {
                try {
                    mSocket = new Socket(ip, port);
                    out = new PrintStream(mSocket.getOutputStream());
                    mBufferedReader = new BufferedReader(new InputStreamReader(mSocket.getInputStream()));
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            mBtn_turn.setText("断开");
                            Toast.makeText(MainActivity.this, "连接成功", Toast.LENGTH_SHORT).show();
                        }
                    });
                } catch (IOException e) {
                    e.printStackTrace();
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(MainActivity.this, "连接失败", Toast.LENGTH_SHORT).show();
                        }
                    });
                }
            }
        }
    

    在run()方法中不仅建立了连接,而且还获得了该连接的输出流对象 out (用于APP向单片机发送数据)和输入流对象 mBufferedReader (用于APP接收单片机发来的数据)。

    3.APP发送数据

    在上文中得到了输出流对象 out,利用它的print()和flush()方法完成数据的发送,代码如下:

    case R.id.btn_send:
                    final String str = mSend_text.getText().toString();
                    if (str != null && out != null) {
                        new Thread(new Runnable() {
                            @Override
                            public void run() {
                                out.print(str);
                                out.flush();
                            }
                        }).start();
    
                    }
                    break;
    

    4.APP接收数据

    在这里本文使用了定时器,设置每隔一段时间就去判断数据输入流对象mBufferedReader的方法ready(),从而得知是否有数据到来了,如果有就存入到一个全局变量中,然后通过Handler对象发送消息,进而实现在UI线程中更新TextView控件,代码如下:

    private class ReceiveDataTask extends TimerTask {
            @Override
            public void run() {
                try {
                    if (mBufferedReader != null && (mBufferedReader.ready())) {
                        char[] readbuff = new char[30];
                        byte[] readByte = new byte[30];
                        mBufferedReader.read(readbuff, 0, readbuff.length);
                        tempStrng = String.valueOf(readbuff);
                        readByte = tempStrng.getBytes();
                        readStrng = new String(readByte, 0, readByte.length, "GB2312");
                        Message message = Message.obtain();
                        message.what = 1212;
                        mHandler.sendMessage(message);
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
    
            }
        }
    
        private void startTimer() {
            Log.i(TAG, "startTimer:");
            if (mTimer == null) {
                mTimer = new Timer();
            }
            if (mReceiveDataTask == null) {
                mReceiveDataTask = new ReceiveDataTask();
            }
            mTimer.schedule(mReceiveDataTask, 0, 10);
        }
    
        private void stopTimer() {
            Log.i(TAG, "stopTimer: ");
            if (mReceiveDataTask != null) {
                mReceiveDataTask.cancel();
                mReceiveDataTask = null;
            }
            if (mTimer != null) {
                mTimer.cancel();
                mTimer = null;
            }
        }
    

    消息处理代码如下:

    private class myHandler extends Handler {
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                switch (msg.what) {
                    case 1212:
                        mSend_text_dis.setText(readStrng);
                        break;
                }
            }
        }
    

    开启定时器和关闭定时器代码如下:

        @Override
        protected void onStart() {
            super.onStart();
            startTimer();
        }
    
        @Override
        protected void onStop() {
            super.onStop();
            stopTimer();
        }
    

    现在就可以实现了数据的互相传输。

    STM32单片机和Android APP源代码免费获取方式:
    在这里插入图片描述

    下位机硬件配置可以参考这个文章:
    STM32单片机通过ESP8266WiFi模块与Android APP实现数据传输(一)—下位机硬件配置

    更多相关内容
  • NFC,Near Field Communication,近场通信技术,基于RFID理论,将非接触式读卡器、非接触卡和点对点功能整合进一块单芯片 ...增加WIFI功能,满足一些用户希望快速传输大数据文件的想法,增加实用性。
  • 该扩展包含两个组件。如果将其导入 App Inventor 项目,则“扩展”标题下会出现两个条目。 1. UDPListener 2. UDPXmitter ...该存档包含源代码、要上传到 App Inventor 的已编译二进制文件和示例应用程序
  • Android WIFI通信scoket通信聊天室WiFi传文件WiFi热点开启,通过建立WiFi热点,启动scoket服务器和服务器进行互相传输文件聊天等,服务器、客户端再同一APP内,可装在2个手机里分别启动服务器和客户端。
  • 文件助手是一个简单的系统工具,它可以方便快捷查看手机的本地文件,还提供远程管理,可以让你在电脑上更方便的管理手机上的文件,是一个比较好的文件工具
  • 在同一个局域网内两台或以上的设备上,直接打开APP就能「自动发现」局域网内的其它设备,选择文件和目标设备即可传文件,无需扫码和填写IP。而且LanDrop还可以支持iOS、Android等系统的「分享」菜单,比如在系统相册...
  • 设置完APP软件后,再来修改我们的工程文件,打开工程“wifi遥控小车”,打开main.c文件,修改红框内信息: HOST_NAME和HOST_PORT为手机上面的IP和端口号,SSID为您的路由器名,PSD为路由器密码,修改好后重新编译后...
  • 一款基于wifi模块的局域网实时聊天以及文件的安卓app,能实现热点创建,热点连接,文件传输,实时通讯等功能。
  • WiFi指纹库采集数据专用安卓apk文件,直接下载即可安装使用,室内定位数据采集阶段神器
  • luci-app-wifidog wifidog的luci
  • WIFI温湿度读取APP源码

    2018-01-12 20:52:01
    通过WIFI的通信方式,实现对温湿度数据的读取和存储的APP源码文件
  • 单片机wifi控制app

    千次阅读 2021-05-26 03:08:52
    说起单片机wifi控制app,单片机方机的资料还容易找,对于app资料网上可以找得到的资料不多,就是找到了,也就是个APP,单片机wifi控制app配套的单片机C语言程序及手机APP源代码一般的都无法找得到,资料不全,给使用...

    说起单片机wifi控制app,单片机方机的资料还容易找,对于app资料网上可以找得到的资料不多,就是找到了,也就是个APP,单片机wifi控制app配套的单片机C语言程序及手机APP源代码一般的都无法找得到,资料不全,给使用带来很大困难。目前,单片机wifi控制app,目前最常见到的是安桌手机的app,其编程用得比较多的是JAVA语言写的,其开发环境是Eclipse,对于基英语基础不好的人来说,比较容易上手的就是易语言编程环境E4A。这里我就贴出一个Eclipse开发环境下写的wifi控制app,下面是APP界面截图:

    09d490f69aab3ba213042b77cf7464cf.png

    实物照片(照片中的APP是E4A写的,单片机的代码是一样的)

    442b244d995fe06ff170273bdf316bfe.png

    布局文件:

    xmlns:tools="http://schemas.android.com/tools"

    xmlns:android1="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context=".ESP8266" >

    android:id="@+id/textView1"

    style="text-align:center"

    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:layout_marginTop="16dp"

    android:gravity="center"

    android:scrollHorizontally="true"

    android:text="@string/ljzt"

    android:textAppearance="?android:attr/textAppearanceLarge" />

    android:id="@+id/button1"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignParentLeft="true"

    android:layout_below="@+id/textView1"

    android:layout_marginLeft="16dp"

    android:layout_marginTop="19dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="@string/open" />

    android:id="@+id/Button02"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_below="@+id/button1"

    android:layout_marginLeft="16dp"

    android:layout_marginTop="50dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="K1开" />

    android:id="@+id/Button03"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_below="@+id/button1"

    android:layout_marginLeft="170dp"

    android:layout_marginTop="50dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android1:text="K1关" />

    android:id="@+id/Button04"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignLeft="@+id/Button02"

    android:layout_below="@+id/Button02"

    android:layout_marginTop="36dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="K2开" />

    android:id="@+id/Button06"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_alignLeft="@+id/Button04"

    android:layout_below="@+id/Button04"

    android:layout_marginTop="36dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="K3开" />

    android:id="@+id/Button07"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_below="@+id/Button05"

    android:layout_marginLeft="170dp"

    android:layout_marginTop="36dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="K3关" />

    android:id="@+id/Button05"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_below="@+id/Button02"

    android:layout_marginLeft="170dp"

    android:layout_marginTop="36dp"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="K2关" />

    android:id="@+id/Button01"

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:layout_below="@+id/textView1"

    android:layout_marginLeft="170dp"

    android:layout_marginTop="19dp"

    android1:layout_alignParentLeft="true"

    android:minWidth="128dip"

    android:scrollHorizontally="true"

    android:text="@string/close" />

    android1:id="@+id/TextView02"

    style="text-align:center"

    android1:layout_width="wrap_content"

    android1:layout_height="wrap_content"

    android1:layout_alignParentLeft="true"

    android1:layout_alignParentRight="true"

    android1:layout_below="@+id/Button07"

    android:layout_marginTop="35dp"

    android1:gravity="center"

    android1:text="@string/ggnr3"

    android1:textAppearance="?android:attr/textAppearanceLarge" />

    JV语言:

    package com.example.esp8266_gpio;

    import java.io.IOException;

    import java.io.PrintStream;

    import java.net.Socket;

    import java.net.UnknownHostException;

    import android.app.Activity;

    import android.os.Bundle;

    import android.view.View;

    import android.widget.Button;

    import android.widget.TextView;

    import android.widget.Toast;

    import android.os.Handler;

    public class ESP8266 extends Activity

    {

    Handler handler = new Handler();

    private final String SERVER_HOST_IP = "192.168.4.1";

    private final int SERVER_HOST_PORT = 5000;

    private Button button1;

    private Button Button01;

    private Button Button02;

    private Button Button03;

    private Button Button04;

    private Button Button05;

    private Button Button06;

    private Button Button07;

    private TextView textView1;

    private Socket socket;

    private PrintStream output;

    Runnable runnable = new Runnable() {

    @Override

    public void run() {

    try

    {

    socket.sendUrgentData(0xFF);

    }catch(Exception ex){

    closeSocket();//断开连接

    }

    handler.postDelayed(this, 1000);

    }

    };

    public void toastText(String message)

    {

    Toast.makeText(this, message, Toast.LENGTH_LONG).show();

    }

    public void handleException(Exception e, String prefix)

    {

    e.printStackTrace();

    toastText(prefix + e.toString());

    }

    @Override

    public void onCreate(Bundle savedInstanceState)

    {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_esp8266);

    initView();

    button1.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    initClientSocket();

    }

    });

    Button01.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    closeSocket();//断开连接

    }

    });

    Button02.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    try

    {

    socket.sendUrgentData(0xFF);

    }catch(Exception ex){

    closeSocket();//断开连接

    }

    sendMessage("GPIO0=0;");

    }

    });

    Button03.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    sendMessage("GPIO0=1;");

    }

    });

    Button04.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    sendMessage("GPIO0=2;");

    }

    });

    Button05.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    sendMessage("GPIO0=3;");

    }

    });

    Button06.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    sendMessage("GPIO0=4;");

    }

    });

    Button07.setOnClickListener(new Button.OnClickListener()

    {

    @Override

    public void onClick(View v)

    {

    sendMessage("GPIO0=5;");

    }

    });

    }

    public void initView()

    {

    button1 = (Button)findViewById(R.id.button1);

    Button01 = (Button)findViewById(R.id.Button01);

    Button02 = (Button)findViewById(R.id.Button02);

    Button03 = (Button)findViewById(R.id.Button03);

    Button04 = (Button)findViewById(R.id.Button04);

    Button05 = (Button)findViewById(R.id.Button05);

    Button06 = (Button)findViewById(R.id.Button06);

    Button07 = (Button)findViewById(R.id.Button07);

    textView1=(TextView)findViewById(R.id.textView1);

    Button01.setEnabled(false);

    Button02.setEnabled(false);

    Button03.setEnabled(false);

    Button04.setEnabled(false);

    Button05.setEnabled(false);

    Button06.setEnabled(false);

    Button07.setEnabled(false);

    textView1.setText("设备未连接");

    }

    public void closeSocket()

    {

    try

    {

    output.close();

    socket.close();

    button1.setEnabled(true);

    Button01.setEnabled(false);

    Button02.setEnabled(false);

    Button03.setEnabled(false);

    Button04.setEnabled(false);

    Button05.setEnabled(false);

    Button06.setEnabled(false);

    Button07.setEnabled(false);

    textView1.setText("设备未连接");

    }

    catch (IOException e)

    {

    }

    }

    private void initClientSocket()

    {

    try

    {

    socket = new Socket(SERVER_HOST_IP, SERVER_HOST_PORT);

    output = new PrintStream(socket.getOutputStream(), true, "utf-8");

    button1.setEnabled(false);

    Button01.setEnabled(true);

    Button02.setEnabled(true);

    Button03.setEnabled(true);

    Button04.setEnabled(true);

    Button05.setEnabled(true);

    Button06.setEnabled(true);

    Button07.setEnabled(true);

    textView1.setText("连接成功");

    handler.postDelayed(runnable, 1000);

    }

    catch (UnknownHostException e)

    {

    handleException(e, "unknown host exception: " + e.toString());

    }

    catch (IOException e)

    {

    toastText("连接错误!请检查是否连接硬件的wifi");

    }

    }

    private void sendMessage(String msg)

    {

    output.print(msg);

    }

    }

    展开全文
  • uni-appwifi环境下,实现视频文件指定目录下载并重命名
  • 基于51单片机+ESP8266模块实现无线测温程序(附手机APP安装文件
  • STM32 通过WIFI从服务器下载升级文件实现OTA功能
  • iOS 实现 WiFi 局域网传输文件App

    千次阅读 2018-03-16 16:50:02
    我经常使用「多看」和「掌阅」App 看书,其中有一个共同的功能就是 WiFi 书,根据 App 的提示在电脑浏览器打开指定的地址,传入文件就可以直接发送到手机上阅读了。虽然这个功能需求不是很多,但是也对其进行了...

    我经常使用「多看」和「掌阅」App 看书,其中有一个共同的功能就是 WiFi 传书,根据 App 的提示在电脑浏览器打开指定的地址,传入文件就可以直接发送到手机上阅读了。

    虽然这个功能需求不是很多,但是也对其进行了一下研究,使用 CocoaHTTPServer 框架对其进行实现。



    多看」和「掌阅」的 WiFi 传书页面

    先看下最后的实现结果:



    进入 App 内展示传输数据,默认是没有传输任何文件的,当点击添加按钮在浏览器进行文件传输后,关闭弹框就会发现传入的 2 个文件了。

    原理

    CocoaHTTPServer 框架能够在 iOS 上建立起一个本地服务器,只要电脑和移动设备连入同一局域网,即可使用电脑访问 iOS 服务器的指定页面,利用 POST 实现文件的上传。

    功能实现

    导入 CocoaHTTPServer 框架

    这里推荐大家使用 cocospods 进行集成,只需在 “Podfile” 填写以下代码:

    
         
    pod 'CocoaHTTPServer'

    如图所示,导入成功

    20170505149397075130489.png

    配置 HttpConnectManager 类

    创建基于 HTTPConnection 的 MyHTTPConnection 类,用来管理 HttpConnection。

    找到 - (void) processStartOfPartWithHeader:(MultipartMessageHeader*) header 方法,修改传入文件的地址为 Document 文件夹

    
         
    NSString *uploadDirPath = [ NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) lastObject];

    创建 IPAdress 管理类

    创建基于 NSObject 的 DHIPAdress 类,用于获取手机的 IP 地址:

    DHIPAdress.h

    
         
    /*!
    * get device ip address
    */
    + ( NSString *)deviceIPAdress;

    DHIPAdress.m

    
         
    + ( NSString *)deviceIPAdress {
    NSString *address = @"an error occurred when obtaining ip address";
    struct ifaddrs *interfaces = NULL;
    struct ifaddrs *temp_addr = NULL;
    int success = 0;
    success = getifaddrs(&interfaces);
    if (success == 0) { // 0 表示获取成功
    temp_addr = interfaces;
    while (temp_addr != NULL) {
    if( temp_addr->ifa_addr->sa_family == AF_INET) {
    // Check if interface is en0 which is the wifi connection on the iPhone
    if ([[ NSString stringWithUTF8String:temp_addr->ifa_name] isEqualToString: @"en0"]) {
    // Get NSString from C String
    address = [ NSString stringWithUTF8String:inet_ntoa((( struct sockaddr_in *)temp_addr->ifa_addr)->sin_addr)];
    }
    }
    temp_addr = temp_addr->ifa_next;
    }
    }
    freeifaddrs(interfaces);
    return address;
    }

    传输文件和读取文件

    默认进入 App 读取本地 Document 文件夹内的文件,首次进入 App 没有任何数据展示。

    点击添加按钮,弹出浏览器的 POST 地址,http://192.168.10.192:58818 端口号为每次随机生成。

    浏览器访问 index.html 和 upload.html 来传输文件,传输成功后点击关闭按钮,再次读取本地数据,可以查看到通过浏览器传输到手机的文件列表。


    展开全文
  • WiFi模块的刷固件工具(安信可的,但是所有WiFi模块都可以用,比如正点原子的8266),WiFi模块和手机互相通信的app(TCP协议,APK文件可以直接安装,可以显示中文),一个esp8266固件(AP模式下会识别接入或者断开...
  • android 4.0以上通过wifi进行通讯,不需要服务器,点对点技术,适合局域网聊天,或者局域网游戏的开发 也可以做手机对手机传送apk ,传送文件,类似快牙之类的应用 技术点:wifi direct
  • 实现的功能:  1、实时检测 6个温度传感器... 2、通过 WIFI 发射,实现手机 APP 接收;  3、可以根据设计要求,增减温度传感器数量;  4、传感器采用单总线接入,方便实用;  5、可以在实物和仿真上实现效果;
  • 基于Linkit Smart 7688 Duo 开发的安卓版的手机控制APP,可以通过APP将Linkit Smart7688 Duo控制的传感器数据上传到手机,及对设备进行开关。
  • 这个也是本科最后一年业余自己玩的,比之前那个更好点,里边除了包含...大家可以自己改,编程这种重要的是思维和方法,这个文件算是给新手一些借鉴吧),另外,这个可以将远程的APP发来的数据做识别,并将数据反馈至APP
  • Wifi万能钥匙去广告显密码,搬运分享 平台:安卓 文件格式:apk MD5:0887fea1f229d2bf40915bd48c722e0c
  • 本例程采用ESP8266 wifi模块与STM32串口连接,并提供AT指令封装库与STM32通讯,实现如下的通讯方式:1、硬件部分Wifi模块丝印图即引脚如下:硬件连接如下:2、手机APP部分APP部分我们采用常用的APP wifi调试软件 ...

    Wifi遥控小车使用说明:

    本例程采用ESP8266 wifi模块与STM32串口连接,并提供AT指令封装库与STM32通讯,实现如下的通讯方式:

    29d2b549fc81493ad7a0a4a96753ce2e.png

    1、硬件部分

    Wifi模块丝印图即引脚如下:

    9307e5fc4a335a06e6384a38dc1d7d1c.png

    硬件连接如下:

    17aa4242f28c7fdab386a6d73bb23ff8.png

    2、手机APP部分

    APP部分我们采用常用的APP wifi调试软件 ITEAD WIFI,安装完成后打开

    7ad5b1f1d8fd078b0c760181edbb2033.png

    如下界面,点击Set up进入设置:

    fc2ff21ae19d91ac3e412f73c8e0e1bf.png

    进入后会自动获取到手机的IP,注意手机是连接到一个路由器下的,支持局域网内调试,先设置端口,一般是 8080

    1a775d07f54a57847d37d5b066a952c7.png

    然后设置指令,我们使用到了如下红框内的指令,指令协议可以参考工程文件interface.h有如下描述:

    //指令定义

    #define COMM_STOP 'I'//停止

    #define COMM_UP 'A'//前进

    #define COMM_DOWN 'B'//后退

    #define COMM_LEFT 'C'//左转

    #define COMM_RIGHT 'D'//右转

    5b659e219c69e178f47362c74c5eb927.png

    指令设置好之后就可以启动服务了,如下点击开始就好了

    be472906d33bb48fcdc03fc088e04dcb.png

    设置完成后如下,这里记下服务端IP和端口号,我这里是 192.168.31.195,端口 8080 ,然后返回:

    1b19961cd40062b1629290e9dceb92b8.png

    3、stm32软件部分

    设置完APP软件后,再来修改我们的工程文件,打开工程“wifi遥控小车”,打开main.c文件,修改红框内信息:

    b20ca2dbfb4412917b12d121cec1a617.png

    HOST_NAME和HOST_PORT为手机上面的IP和端口号,SSID为您的路由器名,PSD为路由器密码,修改好后重新编译后下载。

    下载完成复位一下,就可以运行了,程序会自动连接手机开启的服务,实现TCP/IP通信,连接成功后,看手机端的设置会有如下提示:

    dd77211db5555df1b4447798c440bdfe.png

    本程序还是用了串口1来输出调试信息,将串口1连接电脑后也会在串口调试助手看到如下信息:

    54c34e6c907e99aebcf1a3210f87d736.png

    连接成功后即可在如下界面按键,操作小车运行:

    3fa8317566e7630b5f4396b5685219ab.png

    展开全文
  • wifi数据传输APP操作小结

    万次阅读 2017-07-31 09:24:33
    前期操作的项目一直是通过串口进行有线连接。目前客户客户需求,需要进行WIFI通讯,故总结技术要点如下。
  • WIFI串口调试程序

    热门讨论 2014-06-04 14:47:43
    WIFI串口助手简介: WIFI串口助手是一款基于WIFI串口服务的传输软件,通过该软件可以连接WIFI串口模块进行通信,实现手机串口连接。类似计算机的串口助手,是电子工程师的开发利器。该软件有以下功能: 1.wifi串口...
  • STM32F407单片机通过ESP8266 WiFi模块与Android 手机APP连接实现数据的相互传输,在单片机上通过LCD显示屏实时显示连接的状态以及互相传输的数据,先看效果图: STM32单片机 Android 手机APP 1.下位机硬件配置...
  • ESP8266实现WIFI局域网连接手机APP监控

    千次阅读 2020-09-30 17:00:12
    物料清单 野火STM32F103指南者开发板(自带ESP8266的WIFI模块) DHT11温湿度传感器 HC-SR501人体红外感应传感器 网络调试助手(秉火物联) 功能框图 代码分析 (源码及相关文件随后放在文末, 可根据源码结合过程解读理解...
  • Android WiFi文件共享实现

    千次阅读 2020-04-21 20:59:22
      本文介绍,在同一Wifi环境下,Android手机和PC实现文件共享功能的APPAPP我取名为 WiFi Share。 前言:通常,我们在手机和电脑之间传输文件,最先想到的就是通过USB数据线进行文件传输,这样在已经插上usb数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 50,355
精华内容 20,142
热门标签
关键字:

wifi传文件app