日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

phyphox通過藍牙反控ESP32的技術(shù)細節(jié)

 新用戶5228KeDY 2021-10-10

phyphox通過藍牙反控ESP32的技術(shù)細節(jié)

Phyphox能夠通過它的官方的Arduino支持庫來擴展我們自己創(chuàng)作實驗的事情發(fā)生之后,可由ESP32/Arduino Nano 33外接手機不配備的傳感器來采集電信號、壓強甚至紫外線等傳感器的各種各樣的信號,換句話說,從此我們有兩點本領(lǐng)提升了:

  1. 從此手里拿個手機、搭配一個ESP32/Arduino Nano 33的開發(fā)板,再也不去想什么山東朗威/美國Vernier了——我一直頑固的不相信成品傳感器實驗室的產(chǎn)品,一個根本原因,它不給我們看電路圖,為了實現(xiàn)完美的實驗效果,我一直在懷疑這些商業(yè)公司在各種補償、各種修飾等方面,已經(jīng)遠離了真正的實驗探索應(yīng)該有的雜亂和干擾。一個探索性的實驗,就應(yīng)該存在眾多干擾和不確定因素,甚至想得很美,實操卻根本無法成功。離開這些不確定和無法預(yù)料的失敗,都不應(yīng)該是物理實驗特有的底色。有一些物理實驗,在滴水不漏的原理和設(shè)計之后操作竟然徹徹底底失敗了,我們看到這樣的實驗,我們應(yīng)該異常興奮!做一下就成功了,就象做題一樣,一做就對了,還有什么意思呢?

  2. 從此想著的物理,是給人真情境的教學(xué)。沒有情境,只有題,只有知識點,缺少了實驗的感受。

打住。前面一直在研究如何把ESP32等開發(fā)板采集的數(shù)據(jù)傳到Phyphox里,于是Phyphox成為數(shù)據(jù)處理之后的表現(xiàn)層,讓實驗者在手機上看到實驗的結(jié)果;而另一方面,手機本身也是攜帶眾多的傳感器的,例如Android自動支持十幾種傳感器,為什么不能反過來把手機作為一個巨大的多功能傳感器呢?

答案是可能的。Phyphox BLE庫也支持從手機傳感器把數(shù)據(jù)傳給ESP32,再送給電腦來處理,若是在電腦上做個程序界面,幾乎沒有什么是實現(xiàn)不了的了。

ESP32從Phyphox手機傳感器獲取數(shù)據(jù)和普通的由ESP32向手機Phyphox傳送數(shù)據(jù)的實驗創(chuàng)作步驟與思路不太相同,比較麻煩,但好過直接用藍牙創(chuàng)作實驗。仍然方便一些。ESP32端從手機Phyphox獲取傳感器數(shù)據(jù)的原理,是先在Arduino IDE里面編寫ino,然后燒錄到ESP32,運行起來,等待Phyphox來連接。

在phyphoxBle.cpp里,能見到PhyphoxBLE::read()函數(shù),它讀傳感器數(shù)據(jù)然后把地址給藍牙,然后藍牙把這塊指定長度的內(nèi)存數(shù)據(jù)接收過來處理。

而在Phyphox里面,我們需要自己去編寫.phyphox文件,指定藍牙為output,指定為output的藍牙有input口,這樣在phyphox editor里編寫了phyphox實驗后,手機就成為十幾種傳感器的聚合體了。

這是一個用Phyphox檢測手機所在的環(huán)境里光線強弱的實驗:如果光照比較弱,ESP32會自動把連接在IO26腳上的高亮二極管點亮,而當環(huán)境光照比較強時,ESP32自動熄滅LED。

這個應(yīng)用場景是顯然的——打點計時器有個“先接通電源,后松開紙帶”的事兒,Phyphox輕松可實現(xiàn)了,甚至可以使用phyphox來開發(fā)智能家居,把手機放在床頭,晚上要去洗手間的時候,睜開眼睛四周黑魆魆一片不知暗得多深,于是拿起手機、打開phyphox,測不含g的加速度,搖一搖,原來暗處關(guān)閉的LED亮起來了。

.ino文件:

#include <phyphoxBle.h>
void receivedData();
const int ledPin = 26;

void setup()
{
  PhyphoxBLE::start();
  PhyphoxBLE::configHandler = &receivedData;
  pinMode(ledPin, OUTPUT);
}

void loop()
{
  PhyphoxBLE::poll(); 
}

void receivedData() {
  float light;
  PhyphoxBLE::read(light);
  bool led;

  if (light < 4000.20) {
    led = true;
  } else {
    led = false;
  }
  digitalWrite(ledPin, led);
}

    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章