使用声波通信技术实现wifi配网

不可否认我们已经全面进IoT时代入,各种智能硬件到处可见,比如:智能玩具、智能摄像机、智能门禁、智能家电等等。而这些智能设备要想智能,前提是必须能上网,但是上网又面领着另外一个问题:如何自动连接已有的wifi热点?一般的wifi热点有名称和密码需要用户选择和输入,而我们的智能设备绝大多数都不具备键盘或者触摸屏等输入设备。所以我们要解决在没有输入设备的情况下,如何让智能硬件连接家庭的wifi热点?可以使用声波通信技术来完美解决自动wifi配网的问题。

声波通信基本原理

声波通信指用声波来进行短距离传输信息,发送端通过声波库把文本信息编码成声音,接收端通过声波库把声音解码成文本信息。比如:我们可以将500HZ的正弦波对应数字1,600HZ的正弦波对应数字2,700HZ 的正弦波对应数字3。那么数字串123就对应3段正弦波,规定每段正弦波持续100ms,则123对应300毫秒的声音段。接收方录制声音,对收到的声音进行解析,识别出500HZ,600HZ,700HZ四段正弦波频率,然后查找码本,解码出的数字就是123。

使用声波通信来实现wifi配网

使用声波通信来实现wifi配网其实很简单,其核心就是把wifi热点的名字和密码通过声波传输给智能硬件,然后智能硬件通过wifi热点的名字和密码连接wifi热点从而完成wifi配网。具体步骤如下:

 

  1. 在手机中安装智能硬件的app。
  2. 打开app,输入wifi热点名字和密码,点击自动配网按钮。这时app会通过声波库把wifi热点名和密码编码成声音播放出去,循环播放。
  3. 开启智能硬件,按下配网键,这时智能硬件开始录制声音,并把录制到的声音交给声波库去解码,解码成功后得到wifi热点名和密码,然后停止录音。
  4. 智能硬件使用wifi热点名和密码连接wifi热点。

声波配网的优缺点

优点:

  • 操作简单。
  • 成本低。仅需智能硬件端支持录音模块就可以了,而往往绝大数多智能设备中都自带咪头,即使不自带,其成本也及低。
  • 兼容性好。市面上绝大多数智能硬件都可以使用声波配网。
  • 成功率高。声波的识别率比较高,一般在98%以上。
  • 趣味性强。可以使用定制的声波,比如狗叫,猫叫,窍门声等作为传输用户名和密码的媒介,进一步增加智能硬件的附加值。

缺点:

  • 声波通信的有效距离一般小于10米,所以范围比较有限。

总结

本文讲述了如何使用声波通信技术来实现wifi配网,通过分析其原理和优缺点,可以确定声波通信技术是实现wifi配网的最佳方案。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
声波配网的C语言实现过程可以分为以下几个步骤: 1. 打开音频设备:使用C语言的ALSA(Advanced Linux Sound Architecture)库打开音频设备。 ```c #include <alsa/asoundlib.h> ... snd_pcm_t *handle; snd_pcm_open(&handle, "default", SND_PCM_STREAM_PLAYBACK, 0); ``` 2. 生成声波信号:将要传输的WiFi名称和密码转换为声波信号。可以使用C语言的FFT(Fast Fourier Transform)库生成频率为16kHz的正弦波,并将其调制成包含WiFi名称和密码的声波信号。 ```c #include <fftw3.h> ... fftw_complex *in, *out; fftw_plan p; ... in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N); p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE); ... for (int i = 0; i < strlen(wifi_name); i++) { for (int j = 0; j < 8; j++) { if (wifi_name[i] & (1 << j)) { for (int k = 0; k < N/2; k++) { in[k][0] = amplitude * sin(2 * M_PI * f1 * k / sample_rate); in[k][1] = 0; } } else { for (int k = 0; k < N/2; k++) { in[k][0] = amplitude * sin(2 * M_PI * f2 * k / sample_rate); in[k][1] = 0; } } fftw_execute(p); for (int k = 0; k < N/2; k++) { data[i*N/16+j*N/128+k*2] = out[k][0] / (N/2); data[i*N/16+j*N/128+k*2+1] = out[k][1] / (N/2); } } } ``` 3. 发送声波信号:使用ALSA库将声波信号写入音频设备,从而发送声波信号。 ```c snd_pcm_writei(handle, data, frames); ``` 4. 接收声波信号:使用麦克风接收声波信号,并使用FFT库对其进行解调和解码,提取出其中的WiFi名称和密码。 ```c for (int i = 0; i < frames; i++) { snd_pcm_readi(handle, buffer, 1); for (int j = 0; j < N/2; j++) { in[j][0] = buffer[j*2]; in[j][1] = buffer[j*2+1]; } fftw_execute(p); for (int j = 0; j < strlen(wifi_name); j++) { char c = 0; for (int k = 0; k < 8; k++) { int index = j*N/16+k*N/128+f1*index1/sample_rate; double re = out[index][0]; double im = out[index][1]; double power = re*re + im*im; if (power > threshold) { c |= (1 << k); } } wifi_name[j] = c; } ... } ``` 5. 关闭音频设备:使用ALSA库关闭音频设备。 ```c snd_pcm_close(handle); ``` 以上是声波配网的C语言实现过程的简要介绍。需要注意的是,声波配网实现过程比较复杂,需要涉及到音频设备的操作、FFT库的使用等。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值