Æü«oëVÅux‚‚vè5ˆ¹NùpG6(QfY>@ôÉ–X9äa	UÙµBaÀüúšŠ8Eqtü¯I^í[~ãœ"nÐŸmÅq8=A™ÒŽ×ôÀiûŸÖÃxíz¢GÍÌþû’¡þ¼cà¹Ììç	z¦¾Ëõ Æ�Î6;c£ç_®Ež Áó÷ƒ“K¢äŒ€®diG6Ç"õÀw&E¸þ	€öÙ¼]'f,nißOùÀtrÌ¦8ÐX”×_;õ¼¾Ëu¸/ :\.(åæi&5eÞë«Ö±nÞv¯Òa-u)·@°ô­_µïÜ¶ÊýÙ�ƒîV�ì±ûS@Q…«—]ó2š*»Y×†gu¤™ë„’ŠÜ7ÜL-�–ŽvêeÇ»+QÝ¾LÁ™WÀ3W Ë®o‚T;{å²É¹`$è2Lµ %ºMÖˆ÷V†òäy’;íÙRGôb˜æÔÍÂ£gÓO¹˜�‹Ÿ‰Q(Æ�Ü^§QÃ˜,ô+ždö ó
ß˜u_å³zÚ„f’![dÌeh[ø=±‘<÷¼n"ÇoÁ¥UÄ¥Dq{`%‹R´‹©òOúŠÿ€„cÌpi±{ØZ¹‚²üŠiÓ2§ª&¸T/§²­ídˆŸgµQi�á¢öuú7v½·®5¤¿£rÜ‚äÇ†úÊŽbgOË<‘t¥H•k�Œ<dµA,³øË3ÿóÓ£Ç\îŠç"fF�¡Ú�f’Õ·6ûv7JâîcªCJÞ§¥$ýRrºª zb|•R ¨ì›¾tyÓ?�‹*�'}ŸVð?l„N,à�¾Y-?rµxoÛãzË'k×®PÎÇ)ãns»½¿<Þþ�ÏÄ2�„Hêà0Ý„ÐhkuÜKóñc#¨×Gý–�ƒµ ÑÞÐRÓXžt„›deÉáz†úÇ!‹R/û6»?2�¹…zÁÉÏy]ôL±ÓŒ”6`�~EšÿšM¨¼!�@ÿRÕ÷kV:íúÏP}Ã¨º!|*à,7ËõÌÜ »:9Â8ŒÀC9ïÎ*Öz&g´›´ð|:U<³":T®L^05“—E
ëŒ‘×|#á}C ­c_¼¼�´`if�£W+òI¾J®…	Î·tc?H5ÚOÖJ®…	Î·tc?H5ÚOÖJ®…	Î·tc?H5ÚOÖÏz8«Åã8‡g^0‰‹jÐéI§o$ ƒ½ÿ5€t±Mãñ¯ÅEqÓw±³¸9¬ÐSµîx‡¬* ssçÕ¹î](a`¤k»q2GV�Ìª†0ìåªXpN™®jLk¶”ºC$,�X%<ëŽ¸0…�~FŠšKO)À//sÃïß(äeOÕ�0ìP>‡1Ï­Lâ¹âÓÇfí——Šá¡UÔ¿‰dã.#GÊùy�JIÁÒWã ©Á`Ë23dQ¹	‰²ò{rÅUl™ö0w³ÇûüRZžH÷âTÕòlÅ]€L$WûÁ—è;‰\¡Ç³¾\¥ª’‚ñAe—tn”×1±uêŒ™Äã§ZS-�EôÎÚ–Ï´ª‹8¨]û¼RÚR&†¦ÝÉ•¼>`;h`�r»¦u" LyáÎJo•zc°)?…ƒì ‹²é;¨µ±ð?:;í”ò¸ås¢m¨ÕækZMÃ],vÃBäœ”¿˜xš;áß \ÂÞ-•@EAnüÃÀwtóë9v>›’þD�G…U�\¹U�ÜóP³�W“ÑÐµÅKúÓb‘Õò^È¬O)T x©Âò…gÅ ÆÐ9ˆþmœbZë´ Õ§g¨30$	;V”¿¿.×nÒ�Ž²\x­*‘Õò^È¬O)T x©ôÆŸÜŠn1gf¥Íjû/Ô£†ö³±Í*ßïˆÇÈà8Þ{ôpc •«÷ý»?U#�ªë-7Ïœg¾Æº©def[¤Ë�þ9–4óM†î´7×GÔEÖýöð7Rk·‡—-¹W!TCÆC˜‚'¾uÀ*!�”&@9”«r;¯ÛÛ[+Ÿü�nž»Š°U�'Q÷À—�ÑÏHi8%“®>¢Ú·Þ³pÓ¤7v!á#a5§2äAeuÝ:$xò«ÊX6§U!ð^‘}eÛW47üÂ)´ôø|é‚Ž qþ¬d|#Û•’dG^cà€ Nv]¼¨Õ)ôëEc×ÜÇ¶@ºÀã©³‰îOêƒ¦üf_7¾;ç_ÞôúŽ0­*˜÷è›mpflÁU»ÔûÑßîÍR¥@&ý=\ˆ¿¶ñH�q¦‰Þì-ÛJÔA1:ê-ßAnÁ~Êñ‰ž~V	N€’ ÔžïAh½l•×nŒÿ`Í©“"Ã›¬p¡'…jì��éîG²î"_–D¯ó‘xG^MÔG¦€>¶Tðk^ÄûI»u8ÀÝÞË¦*ëÍž;4ÝØ¯V$æ_Ìá²"²ð}ãPw¥v·Õ¿Òž›¶ãJ®…	Î·tc?H5ÚOÖ5.¨øžïM†Ë–h;}1q¨ÖdˆáòÚ�Â 
 M¤X}w?=¹ÃJ±ñ=]¡)ù¬ÌÁs%	§b¨£¡Z·Kc:´þdþÚÄr+±é^vØØ»p IDgåÔÄP„«,+÷7Åqþˆjí&ÌYExgYÕûÌŸ­4§N-`•+4~	L¢yhbÃÈ2æ¢ØŒ—ìÚYÇ©—º·í[ú÷�>&çÒ”[»•h›b$qs5‚Î2Àj;$æÎð\l¿­ƒ‹Íù¹£/‘.X¹0yš1ƒÌr¿ìlòmñÍ4Ï‡�”Žðáˆ5ÛjÚÕ‹öö˜cšÝì™å5°L]¼‹¶Ì\ez¾Qá"/Wà&m4NêTR™Þ"ß:é\sk@yUcÈ8°”ƒ¬ÙË*îþJ¡ª˜2œî:©ÄÄ¼Œ€%tƒí/··i@¯Öò�ê)uÜé·ù=9`£t5<Z	´üÒy*Vãˆ@uõŽµ™¢ä�ã´ë0å ±‰^3#eŽ{5v¸ÝII;{ pL–ˆæ¤U5§ÒóÕQ7¶ùÄ9‹\cƒëxü"»_“¨’‚˜d44^ óMc¡XYµŠ”Šä)Ôû°ÆÃƒþ©#­Z·`åÔÚiÙ†²€Ø—"¨³FÅÃ/8qxX5ò†L¢Úåµ<ß>g4G„z¯°lqë­’ýg dÀ0±Îä&P£¤…w²_5v>’i—¬(Ÿ—ü iÆ‘l}â3œÅÂUŽ»ï£<.š$ìTÄ¾¡c§`Ý
}ë?V¡Qrƒ2‰=?(9�eD}Q.yq}W¨*ôOÀa+—UfÏhÑG~6µÁøÉÂÃ~¼1£I(²exôç,~˜™£f~(_ QZ”íÉ?w�ÿIÛæˆ2D2ãØ«FÑ{ŸÐB§âwë ”é€_YBlGƒ88¢BôûGUî6v‘hk3×>Þ&ŠS€%iyõÚŸBw6¹@£Û|ZöÜmIBŽåF	õþ”/;ôö²,(³&à[P—@? hñæ¬<™aÀ4˜˜M¾C[Ã¾	¯FˆËÕœ=r¨ÝüÙ
ä¡—hõC‹“h¶×±‰Ö”DÆÃñ`EÉ�~`§j›ŠÒêê3p<¢MôÐ˜nú˜t�î¬ùÛ)#ŠäÞë0�íH+¸ûQïk ZÖWÚeÐú��6µjÏxZç5 ‘p¨i/ìEIpÓ=þÊ÷®âösÞ
¹K‰æíFti«&å B_ÿ:Ìn®øŽazùwÇÚ¸3%›cÃÎ?š âý'‡VWÈÛ½é„8´“-pj¶¾ÉÂÕoõõ\ÔjŽd¹·äDlD]0¢hhš,ÔXì¨gŸk
ðDGC&Ê4!:*`9Ï¯”R–ÿ¸ïÙ-e@§yA…ÃÆuŠd‚Ó‘Yàø¡ôKÛ8œ¬K»ì]ÁS.·¥y?rÁq�çÕégò]²i²ü©SÙñF.Œ?×þÉm-ó€¦Â“=ºT–ÍF-Ë~ÉJ_	ê.d\€—Ùá@n*ÛÂÒ¢�¯™9‹×”Ë”ãçýÖÒŒ s“Oƒ�Âæ��ÝÎØÙÚiÍÂåÝÚÒöé
R©¥³æÐGxžˆŠÀÞ Áÿ]T4é®}Àcl(—g'á&F/«‰C'Ûœˆî)KÏUØq[„Å½Êä“Üt|s±ºˆ#UÁëIÓÏîî¦­HVªÃ‡– vóÿÞOv—Ly„’Ðß…SßLüw}J­ë®Z*ÈnýØ7ƒCÓQ°>UJÇbÂ|¶Ã�–19ø¨Ð?,m
¡¨5¦[ì�Ypp0�Ò_ö°Rx#±Å¿ë®]r»›3Ð•ä“%~0çÁex|eeª‘ü¸½ñÆÄÉíV®žÓ
ñêÒ8›}þ¢¾åJÒ�6Sé¯ 
QŒ£ Û `;¥nNl·F´½ÖH}|5™vã÷çà/J´Â´òrƒÑ=ª€µ%Ì‘Õ”$±.GŒS£ìV¸_‡W•“&Šrxe2¤è[ÆáþÏ´&ˆƒÏ•. •Søs¶j˜\�kÁar»cÇÛ´ñ»ËÝ�äóëíÆjøµŠ1þïûßÓ´žçj«—Ùm�½dÏNØu|”ò,g_ý 2?ó)|3W*í…ñ·SW6Š�€™@•³à\T™Ó­*©D�ÙEU{Ð~Í™ÜVAuG³eãÕ¡�îél‰yZ Z;æå_‹–yfíwÖPùüŸV¨	 <*„<–£-²Ï�Ä��çÛ—ŒåªÀïËþ ƒÛ¤æîä{D¶²‚¼R`Qýic—±-qmëeqÔ¦¥ù�ã;‡Ÿºœ�ò´„sEnUÑZàYk–»�ÒÚGâ‘tê¨Ìz-jlè;h>>þh«ÔSD8X`‘D[üð~wšÈ7<™b_0fdJµ9…DØF,ß-Îtœ>t Œþþ†éÄ†¾ÉñpCµ‚“´ÆÜ³¨4×#�sKz=‰Ü*L:u ã+.S—-Â$Kh5UT–ÈÔû#U¤rF®‹<‚­ ™Uÿþ{}tt™>rPÂ?NãŠÅÁ–iÚ-šØ=± çÈwÍ‘³3(Ü.r!2.ŽQ;ß¥ò7*´Ž¡£A7Pˆ:1ä!šš Å÷bŠéü¡FOI†óÌ'·¬nßjú-=�éâˆÏáf±¢57ðS—ñ~ä,à�¾Y-?rµxoÛã«yJo6í�¼ßr#mÓPkSç”AŠŒ=DàÚ×¹pQÎ%Gà†î5÷çs­�„"šÑ^þ°`p|¡qŸ©¯¸"GÆÞÖ×ÒÆë	1dp¡÷S¤G-Qêv\›ÈWÄ~\0drÕ¬n×#ÊÒ+ù×Òý“õL¹ß3Õ{‡]m]F¸íN¸ò:î-Ôh>Õ‚;ÁU     # acc_x = d[0] / MPU6050_ACC_SCALING
            # acc_y = d[1] / MPU6050_ACC_SCALING
            # acc_z = d[2] / MPU6050_ACC_SCALING
            
            # gyr_x = d[3] / MPU6050_GYRO_SCALING
            # gyr_y = d[4] / MPU6050_GYRO_SCALING
            # gyr_z = d[5] / MPU6050_GYRO_SCALING

            # vals.append((acc_x, acc_y, acc_z, gyr_x, gyr_y, gyr_z))

        # print(len(vals))

        
        if len(vals) > FFT_VAL_CNT:
            t0 = time.perf_counter()
            ffts_loc = []
            freqs_loc = []

            fft_vals = vals[-FFT_VAL_CNT:]

            for i in range(MPU6050_FIFO_VALUES_PER_PACKAGE):
                fft_vals_single = [r[i] for r in fft_vals]
                # fft_vals = vals[-FFT_VAL_CNT][:, i]

                fft = np.abs(np.fft.fft(fft_vals_single)[:FFT_VAL_CNT // 2]).tolist()[1:200]
                freq = np.fft.fftfreq(FFT_VAL_CNT, 1 / MEAS_SAMPLE_RATE)[:FFT_VAL_CNT // 2].tolist()[1:200]

                ffts_loc.append(fft)
                freqs_loc.append(freq)

                # positive_fft = np.abs(fft_result[:len(fft_result)//2])
                # positive_freqs = frequencies[:len(frequencies)//2]

            ffts.append(ffts_loc)
            freqs.append(freqs_loc)

            t1 = time.perf_counter()
            d = t1 - t0
            # print(d)

        qc += 1
        time.sleep(FETCH_DATA_INTERVAL)


## --- main ----------------------------------------------------------------


vals = []
# vals = np.empty((0))
vals_raw = []

ffts = []
freqs = []

measure_state = threading.Event()
measure_data_lock = threading.Lock()

data_fetcher_thread = threading.Thread(target=fetch_data)
data_fetcher_thread.start()

asyncio.run(run_server())



